摘要:
题目 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 阅读全文
摘要:
题目 现有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] 阅读全文
摘要:
题目 序列{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( 阅读全文
摘要:
题目 略 简单的贪心 #include <iostream> #include <cstring> using namespace std; const int N=2003; int n,k,len; int c[30]; char s[N]; int main(){ int cas; cin>> 阅读全文
摘要:
题目 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) + .. 阅读全文
摘要:
题目 对序列a 进行操作 对两个相等的相邻元素 ,合并为a[x]+1 问最后剩余序列的最小长度 区间dp,f[i][j]表示某区间的合成值,g[i][j]表示某区间最终的序列长度 那么直接开始区间dp的套路,考虑[i,j]分割为 [i,k],[k+1,j] 不合并时 应该取g[i][j]=min(g 阅读全文
摘要:
题目 整数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 阅读全文
摘要:
题目 max{p·ai + q·aj + r·ak } 从n个元素里挑出3个求值,且每个元素可以选多次,简单的无穷背包 注意有负数 #include <iostream> #include <cstring> using namespace std; const int N=1e5+3; #defi 阅读全文
摘要:
aboat:config layout.css.devPixelsPerPx 1.2 阅读全文