随笔分类 - 动态规划——背包
摘要:Description 给定$n$, $m$,求十进制$n$位数每个位数之积等于k的方案数 Solution dp+高精+数学 考虑$k=0$的情况,由于可以有若干个$0$,所以方案数为$\sum\limits_{i=1}^{n}{n\choose m}\times 9^{n-i}$ 考虑另外的情况
阅读全文
摘要:Description 【HAOI2008】硬币购物 给定4种硬币的价值。若干组询问,每次给出4种硬币的数量和要购买的花费,求恰好购买的方案数 Solution 背包dp计数+容斥 如果不考虑硬币数量的限制,那么这个问题就是完全背包方案数问题,一遍dp就可以解决 现在加上数量的限制,那么合法方案数就
阅读全文
摘要:模板来源:codevs 5429 根据背包问题的相关状态转移方程,我们不难写出朴素的算法 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace s
阅读全文
摘要:一道多重背包的简化版问题,把多重背包的最优性问题简化为可行性问题,计算时只需将取最优值的一步改为或运算即可。 本题有解的条件:所有物品价值的一半能被表示出来。 本人使用了最简单的二进制优化即可通过本题。 1 #include <iostream> 2 #include <cstdio> 3 #inc
阅读全文
摘要:树形dp可能是最优美的dp了…… 这是一道经典的树上背包问题,考虑两种做法。第一种是直接在树上做一遍背包问题,另一种是把这棵树转化成“左儿子右兄弟”的二叉树,再做一遍背包问题。 方法一:我们定义f[i][j]表示以i为根的子树,一共选j门课最大的分数,那么我们可以得到f[i][j]=max(f[i]
阅读全文
摘要:先说80分代码:最基本的混合背包,判断是完全,01,或是多重,再选择。 状态转移方程:f[j]=max(f[j],f[j-co[i]]+v[i]); 再说100分代码:把每个物品进行二进制拆分,分成1,2,4,8,16,32,64 ,,,再把花费和价值乘以次数即可。 例如:某个物品可以用20次,那么
阅读全文

浙公网安备 33010602011771号