随笔 - 531
文章 - 0
评论 - 3
阅读 -
10215
随笔分类 - dp
cf1060E
摘要:题目 给出一棵树,每条边的长度为1 现在对于原图中每一对距离为2的点,连一条长度为1的边。 求 ,1<=i<j<=n 其中dist(i,j) 是两点的最短距离 解答 符号 [ ]为向上取整 考虑一对(i,j),每一步一定贪心地走长度为2的边(然后最后一步可能要走长度为1的边 则 dist(i,j)=
阅读全文
cf1153D
摘要:题目 (n=3e5 n个节点以1为根的一棵树,每个非叶子节点都有一个操作max或min(0表示min,1表示max),表示这个节点中的值应该分别等于其子节点中所有值的最大值或最小值。 假设树上有k个叶节点,你可以将每个叶节点填上[1,k]的数字,且每个数字只使用一次,求根节点的最大值 解答 思维题
阅读全文
cf791C
摘要:题目 sum{dis(i,j)} dis(i,j) 为两点的最短跳跃次数,(每次可以跳k条边) 解答 #include <iostream> #include <cstring> #include <vector> using namespace std; const int N=2e5+4; #d
阅读全文
CF922E
摘要:题目 n棵树,开始有W元,第i棵树上有num[i]只鸟,第i棵树上的一只鸟要花c[i]元,每走一棵树增加x元,每买一个鸟会让钱包容量增加b,问最多能买到几只鸟? 解答 线性dp,状态f[i][j] ,j是当前拥有鸟的个数 f[i][j] = max{f[i-1][j-k]+X-w[i-1]*k #i
阅读全文
cf118D
摘要:题目 现有A,B两种物品(各有n1和n2个) 组成一个排列(全部物品都用到), 且满足条件 : 不会出现连续k个物品 (对A物品 k=k1, B物品k=k2) 解答 线性dp,设f[i][j][k][0/1] 前i个物品,j个A,k个B,最后一个取A或B 枚举最后一个连续相同物品的区间即可 f[i]
阅读全文
cf455A
摘要:题目 序列{a} 操作: 删掉元素a[i] ,并同时删掉a[i]-1,a[i]+1 的元素 。 本次操作的收益为a[i] 问最大收益 解答 用一个桶b[i] 存a[i]的个数 f[i][1/0]表示前i个数,第i个数是否选 若选择了某个值 x, 产生收益 x*( x的个数) f[i][0]=max(
阅读全文
cf366c
摘要:题目 n个物品 有属性a[i],b[i] 选择若干物品,且有sum{a[i]}=sum{b[i]}*k, 问 sum{a[i]} 最大值 n<=100 解答 01背包, sum{a[i]} -sum{b[i]}*k==0, 展开写 (a[1]-b[1]*k) + (a[2]-b[2]*k) + ..
阅读全文
cf1312E
摘要:题目 对序列a 进行操作 对两个相等的相邻元素 ,合并为a[x]+1 问最后剩余序列的最小长度 区间dp,f[i][j]表示某区间的合成值,g[i][j]表示某区间最终的序列长度 那么直接开始区间dp的套路,考虑[i,j]分割为 [i,k],[k+1,j] 不合并时 应该取g[i][j]=min(g
阅读全文
cf189A
摘要:题目 整数n拆分为若干数字(a,b或c)的和,求序列最大长度 如 5=2+1+1 完全背包,但要求体积刚好用完 f[i][j] 表示最大个数 改下dp边界,f[0]=0,else f[i]= -inf #include <iostream> #include <cstring> using name
阅读全文
cf855B
摘要:题目 max{p·ai + q·aj + r·ak } 从n个元素里挑出3个求值,且每个元素可以选多次,简单的无穷背包 注意有负数 #include <iostream> #include <cstring> using namespace std; const int N=1e5+3; #defi
阅读全文