随笔分类 -  动态规划

动态规划
摘要:https://www.luogu.com.cn/problem/P4707 题解: 扩展min-max容斥见: https://www.cnblogs.com/coldchair/p/13404911.html 一开始使$k=n-k+1$,意义转为第$k$大。 然后套容斥: \(\sum_{T} 阅读全文
posted @ 2020-07-30 20:34 Cold_Chair 阅读(179) 评论(0) 推荐(0)
摘要:http://uoj.ac/problem/193 题解: 考虑先求出$f[S]$表示$S$这个点集的基环树个数。 可以先求$f_[S]$表示$S$点集成环的方案数: $dp[S][i]$表示已选$S$中的点,最后一个是$i$,的方案数,每次只能新加一个比$S$最小大的点,这样每个$\ge 3$环会 阅读全文
posted @ 2020-07-30 19:30 Cold_Chair 阅读(339) 评论(0) 推荐(0)
摘要:在研究 http://uoj.ac/contest/37/problem/285 这题时发现了这个东西: “满足决策单调性的 DP 的通用做法” 看一道更简单的例题: 【NOI2009】诗人小G 大概就是: \(f[i]=min(f[j]+cost(j+1..i))(j<i)\) 然后满足决策单调性 阅读全文
posted @ 2020-07-24 22:15 Cold_Chair 阅读(245) 评论(0) 推荐(0)
摘要:题目大意: 给一棵$n$个点的树,选$k=1 \sim n$条不相交边,使得权值和最大。 \(n \le 2 \times 10^5\) 题解: 考虑设$f[i][j][0/1]$表示$i$子树里选了$j$条边,$i$选了没有的最大值。 猜性质,它是凸的。 那么就可以闵科夫斯基和快速合并两个这样的数 阅读全文
posted @ 2020-07-21 21:37 Cold_Chair 阅读(303) 评论(0) 推荐(0)
摘要:题目大意: $n$种花色,每个花色$m$种数字,每个花色数字牌不超过$4$张的雀魂。 随机选$3k+2$个牌,问能拆成$k$个面子和$1$个对子的概率。 \(n,m \le 10^9, k \le 30\) 题解: 先考虑一种花色的牌选出$0..3k+2$的方案数,后面做一个背包就可以组合。 再考虑 阅读全文
posted @ 2020-07-21 21:25 Cold_Chair 阅读(315) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/2027 https://loj.ac/submission/831930 https://loj.ac/problem/2091 https://loj.ac/submission/831907 对于T1,发现是要每个颜色恰好选一个。 对于T2,发现是 阅读全文
posted @ 2020-06-10 21:15 Cold_Chair 阅读(200) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/2093 题解: 我想这题时卡死在枚举每个点求答案,结果最优也只能$O(n^4)$,要多从整体看。 考虑对整体来做,枚举$x$,表示求$\le x$的方案数(经过尝试得到这个好算),$x$可以是离散后的,转换真正的答案显然。 考虑大于$x$的数把序列分成 阅读全文
posted @ 2020-06-10 20:44 Cold_Chair 阅读(228) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/3217 考虑已经确定了前i个,状态可以只记后面的$n-i$个点之间的$n-i+1$个间隔里的已选的数。 这个状态最大是$\sum_^n (n/k)^k$左右,可以发现不是很大。 注意要用多进制数去存状态,不然会被卡常。 Code: #include<b 阅读全文
posted @ 2020-05-30 10:38 Cold_Chair 阅读(732) 评论(0) 推荐(1)
摘要:http://codeforces.com/gym/102331/problem/H 题解: 首先,当$k$很小时,有一经典模拟费用流做法: 每次找到最大的子区间,加上它,并把它取反,可以用线段树维护。 但这题$k$和$n$同阶,需要思考其它的做法。 还可以凸优化dp,二分斜率k后用单调队列就可以$ 阅读全文
posted @ 2020-05-28 21:36 Cold_Chair 阅读(867) 评论(2) 推荐(0)
摘要:Description: 小火车励志成为一名辣鸡出题人,但是要成为一名辣鸡出题人,代码必须跑得比谁都快,这样就能把他们都卡常数了!为了锻炼自己,他找到了一位长者——罗长者,罗长者说:“你啊,toosimple!不要想弄一个大新闻,说现在已经‘钦定’了,然后把我批评一番。”小火车坐在高高的骨灰旁边,听 阅读全文
posted @ 2020-05-22 16:54 Cold_Chair 阅读(333) 评论(0) 推荐(0)
摘要:Description: 小火车励志成为一名辣鸡出题人,但是要成为一名辣鸡出题人,代码必须跑得比谁都快,这样就能把他们都卡常数了!为了锻炼自己,他找到了一位长者——乐滋滋,乐滋滋说:“你啊,tooyoung!西方的哪一个国家我没有去过?”小火车坐在高高的骨灰旁边,听长者讲那西方的事情。 西方有n个国 阅读全文
posted @ 2020-05-22 16:49 Cold_Chair 阅读(290) 评论(0) 推荐(0)
摘要:https://gmoj.net/senior/ contest/show/2376/1 题解: 考虑把区间拆成左端点和右端点,$T$的限制相当于任何一个时候,没有匹配的左端点$\le T$ 设$f[i][p][q]$表示刚刚确定了$i$的右括号,和$i+1$的左括号,匹配了$p$个区间,还有$q$ 阅读全文
posted @ 2020-05-18 22:28 Cold_Chair 阅读(138) 评论(0) 推荐(0)
摘要:Description: https://gmoj.net/senior/ main/show/5728 题解: 考虑不是环上怎么做: 预处理$f[i][j]$表示i个分成j段,段与段之间有序,且乘上的了段的大小,这样的所有方案权值和。 考虑,现在相当于有第i个颜色有$b[i]$段,把这些合并,是的 阅读全文
posted @ 2020-05-18 19:04 Cold_Chair 阅读(234) 评论(0) 推荐(0)
摘要:https://gmoj.net/senior/ contest/show/2391/1 $T\le 10, n \le 100$ 发现不会有两个矩形的横坐标是相交的,这样不如变成不相交更优。 但是会有两个矩形是包含的。 设$f[i][j][k]$表示覆盖横坐标$\in [i,j]$,纵坐标$ k$ 阅读全文
posted @ 2020-05-08 16:15 Cold_Chair 阅读(243) 评论(0) 推荐(0)
摘要:http://uoj.ac/problem/7 记$dis[i]$为到根的距离。 dp就是: $f[i]=min(f[j]+(dis[i] dis[j]) p[i]+q[i])$ 可行的$j$是$i$到一个祖先的一条链。 考虑树是一条链的时候,直接扫过去并用线段树维护下凸壳,查询就线段树上每个区间二 阅读全文
posted @ 2020-04-30 15:26 Cold_Chair 阅读(191) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/2087 干脆把这年NOI改成猜结论大赛好了。 先把$h$从小到大排序。 上来先猜三个显然的结论: 1.一个$h[i]$不会被用多次 2.我们用到的一定是$h$的一个后缀 3.$h$的后缀用法,把$h$的后缀划分成若干段,从左往右每次合并一段 设$f[i 阅读全文
posted @ 2020-04-29 17:46 Cold_Chair 阅读(195) 评论(0) 推荐(0)
摘要:https://codeforces.com/contest/1276/problem/D 有点atcoder题的意思。 我们肯定是不能按时间顺序考虑的。 那么按树形dp的顺序考虑。 考虑以$i$为根的一棵子树里的边的情况,当然可能要加上$i fa[i]$这条边。 因为$i$的子节点的子树都做了,所 阅读全文
posted @ 2020-04-27 20:33 Cold_Chair 阅读(215) 评论(0) 推荐(0)
摘要:http://codeforces.com/contest/1158/problem/F 先考虑如何求一个序列的density。 假设要求序列$A[1..n]$的density。 找到$A[1..n]$的最小一个前缀$A[1..i]$,使其包含$1 c$的所有颜色。 那么我们可以 以这些颜色作为那些 阅读全文
posted @ 2020-04-27 16:59 Cold_Chair 阅读(418) 评论(0) 推荐(0)
摘要:https://loj.ac/problem/522 第一个性质是在告诉我们这是个DAG。 所以暴力的做法就是设$f[i]$表示$i$结尾的最大答案,去枚举能够到达$i$的$j$,转移即可,转移顺序可以按半径从大到小。 注意到那个转移式显然是不可优化的,也就是我们只能暴力枚举$j$,事实上对于每个$ 阅读全文
posted @ 2020-04-22 12:45 Cold_Chair 阅读(460) 评论(0) 推荐(1)
摘要:https://loj.ac/problem/2546 直接树形dp设$f[i][j][0/1][0/1]$表示$i$子树,选了$j$个,$i被覆盖了吗$,$选了i吗$ 复杂度是$O(n k^2)$。 加上子树大小优化,复杂度降为$O(nk)$,还有其它优化: 考虑度数为1的点,与它唯一相邻的点必须 阅读全文
posted @ 2020-04-21 16:52 Cold_Chair 阅读(189) 评论(0) 推荐(0)