随笔分类 - DP
摘要:cd1101d 简单dp 链接 "codeforces" 思路 所有数的质因数存下来,最多6个。 然后$f[i][j][0/1]$表示i子树内链gcd为j的i是否为链头。 暴力转移就行了 代码 cpp include using namespace std; const int _=2e5+7,N=
阅读全文
摘要:bzoj2287【POJ Challenge】消失之物 缺一01背包 链接 "bzoj" 思路 分治solve(l,r,arr)表示缺少物品$[l,r]$的dp数组arr。 然后solve(l,mid,arr)用右边的物品更新,solve(mid+1,r,arr)同理。 $f(n)=2 f(\fra
阅读全文
摘要:cf1179D 链接 "cf" 思路 "csdn" 很玄学,正解是斜率优化dp,但被一个奇妙的贪心过了。 代码 cpp include define ll long long using namespace std; const int _=5e5+7; int n,siz[_],S,id; ll
阅读全文
摘要:[HNOI2016]序列 CDQ 链接 "loj" 思路 一个点最小变为l,最大变为r,不变的时候为v 那么j能在i前面就要满足。 $j using namespace std; const int _=1e5+7; int n,m,f[_],ans; struct node {int i,v,l,
阅读全文
摘要:「NOI2019」回家路线 链接 "loj" 思路 f[i][j]第i个点,时间为j,暴力转移 复杂度O(m t),好像正解是斜率优化,出题人太不小心了233 代码 cpp include using namespace std; const int N=2e5+7,INF=0x3f3f3f3f;
阅读全文
摘要:链接 [cf]http://codeforces.com/contest/1175/problem/F) 思路 当1在1的位置做dp[i]为i的子树所有的方案。 一条性质是i的子树所占圆上的位置一定一段连续的。 那$f[i]$的方案就是$(son[i]+(i!=1))!\prod\limits_{x
阅读全文
摘要:1023: [SHOI2008]cactus仙人掌图 链接 "bzoj" 思路 仙人掌求两点间最短路最大。姑且叫他仙人掌的直径。 f[u]表示u为端点的最长的最短路 当他是圆圆边,和树上一样dp转移。 圆方边,取出环了进行别的dp。 转化成带权的环上更新两端距离的最短路的最大值,单调队列。 最后别忘
阅读全文
摘要:CF Round 551 (Div. 2) D 链接 https://codeforces.com/contest/1153/problem/D 思路 不考虑赋值和贪心,考虑排名。 设$dp_i$是子树i中的i是第dp_i大的(相同大小放在后面)。 $opt=1,dp_u=max(dp[v])(v\
阅读全文
摘要:luoguP1850 换教室 链接 https://www.luogu.org/problemnew/show/P1850 思路 状态很显然就是f[n][k][0/1] 前i次,用了k次机会,当前是在哪个教室 转移就很、、了。 每次转移i的时候,一定是从i的两个可能的教室来的。 那就有四种可能的方式
阅读全文
摘要:2091: [Poi2010]The Minima Game DP 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2091 思路 这类问题好迷呀。 我们先从小到大sort 先手一定是个后缀。 因为你不能留下大数让对手选呀。 然后后手就在你选择
阅读全文
摘要:luoguP1281 书的复制 链接 https://www.luogu.org/problemnew/show/P1281 思路 简单dp,输出方案。 很明显dp记录路径对不对? 恭喜你死了。 求出dp值,倒叙贪心取最长 错误 好久之前咕咕的题目 下载数据才看出来不能记录路径 代码
阅读全文
摘要:bzoj1133: [POI2009]Kon 链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1133 思路 f[i][k]表示前i个,选了k个,其中必选i的最大值 f[i][k]=f[j][k 1]+贡献 这个贡献就是j到i之间的边界碰到i的
阅读全文
摘要:loj 2483. 「CEOI2017」Building Bridges 链接 https://loj.ac/problem/2483 思路 $$f[i]=f[j]+(h[i] h[j])^2+(sum[i 1] sum[j])$$ $$f[i]=f[j]+h[i]^2+h[j]^2 2 h[i]
阅读全文
摘要:loj2353. 「NOI2007」 货币兑换 链接 https://loj.ac/problem/2353 思路 题目不重要,重要的是最后一句话 提示 必然存在一种最优的买卖方案满足:每次买进操作使用完所有的人民币;每次卖出操作卖出所有的金券。 所以f[i]表示第i天最大收益 设第i天把m元换成券
阅读全文
摘要:链接 https://loj.ac/problem/2545 思路 f[i][j]表示i到j区间的最小监视人数 可以预处理出来g[i][j],表示i能否监视到j (其实预处理的关系不大,完全可以直接判断,不过比较不能加=) 一个区间$[l,r]$,一定会选r,显然 然后只要管r不能监视的地方$[x,
阅读全文
摘要:链接 https://www.luogu.org/problemnew/show/P1880 思路 总之就是很牛逼的四边形不等式优化 复杂度$O(n^2)$ 代码 cpp include include include using namespace std; const int N=207; in
阅读全文
摘要:链接 https://www.lydsy.com/JudgeOnline/problem.php?id=3900 思路 状态压缩,f[i]表示只包含i中的所有元素的最小代价 所有元素排序后两两配对都不能满足,就是inf 其他的,一定小于等于元素个数 1 orz wxy 收获 1,知道自己啥都不会 2
阅读全文
摘要:题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2086 思路 这就有点妙了 题目意思就是让你求平均数 =k的最长序列 先求出a[i] k的前缀和 就是求sum[i] sum[j] =0的最大i j 当$j define ll long l
阅读全文
摘要:题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=1566 思路 n个球,第i个球颜色为ai,对于颜色j,对答案的贡献为颜色为j的球的个数的平方 k^2=(1+1+1+..+1) (1+1++1+..+1) for (i=1; i defin
阅读全文
摘要:题目链接 https://loj.ac/problem/2510 思路 f[i][a][b]表示到i时,公路个数a,铁路个数b 记忆化 复杂度=状态数=$nlog^2n$ 代码 cpp include define ll long long using namespace std; const in
阅读全文