随笔分类 - 动态规划--背包DP
摘要:$n \leq 50$的树,每个点有权值,现要选点(可多次选一个点)使点数尽量多,如下限制:选的总权值不超过$C \leq 1e9$;$c_i$表示$i$选的次数,$p_i$表示$i$的父亲,那么$c_{p_i} \leq c_i \leq c_{p_i}+D$,$D \leq 1e9$是给定常数。
阅读全文
摘要:$n \leq 2500$个人选$m \leq n$个,每人有花费有收益,还有依赖人,选他前必须选依赖人。问最大的收益花费比。 01分数规划。$\sum p_i-ts_i \leq 0$,这式子成立时要把$t$调小,不成立时要把$t$调大,我们希望$t$大,就尽可能让他不成立,所以就尽可能让左边大。
阅读全文
摘要:$n \leq 10000$个盒子,有高度,高度总和$\leq 10000$,盒子有重要的和不重要的,问最多有多少重要盒子的底端在区间$[L,R]$。 这是个入门级的DP,但需要一点胆量MD这题能放DIV1E。。 放盒子顺序:不重要的,重要的,然后乱放。不重要的可以无脑放,但重要的需要一定的顺序。。
阅读全文
摘要:n<=500的树上有点权(有正负),选若干个点使点权和>=X(<=1e6)并且相邻点的对数最多,输出相邻点最多多少对。 在n个点里选某权和的最多相邻点->在n个点里选某数量的相邻点使权和最大 f(i,j,0/1)--子树i中选j对相邻关系,不选/选择节点i的最大权和, 就是个背包嘛。不过注意一下背包
阅读全文
摘要:n<=400个东西,每个东西有高度<=100,这种东西在堆放过程中不得超过的最大高度<=40000,以及每个东西的个数<=10,求最高能堆多高。 算了下背包复杂度不太对然后开了bitset。。 1 #include<stdio.h> 2 #include<string.h> 3 #include<s
阅读全文
摘要:n<=50个游戏机有花费,每个游戏机有Gi<=10种游戏,每种游戏有花费有收益,买了游戏机才能玩对应游戏,求最大收益。 这就是一个背包!不过有依存关系,就不会了! 方法一:f[i][j]表示游戏机i用j块钱能得多少收益,这是可以预处理的,而g[i][j]表示前i个游戏机用j块钱最大收益, 果断tle
阅读全文
摘要:n<=100种硬币,给每种的硬币的面额<=120和我每种有多少个<=10000,店主的硬币跟我一样但有无限个,求买t<=10000块钱的东西钱最少转手几次。 我拿的硬币最少几次就是多重背包,店主还的最少当然是完全背包啦,那问题在于这个背包多大呀? 找回来的钱和我给的钱一定没有交集,如果有,那当初少给
阅读全文
摘要:S<=50只股票D<=10天的价格给出,求第一天开始用n<=200000元最后能得到的最大钱数,保证答案<=500000。 做D次完全背包即可,每次做完把dp数组清空。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #i
阅读全文

浙公网安备 33010602011771号