动态规划
会笑的小熊
在努力,在进步
展开
-
背包问题(分组背包问题)
【代码】背包问题(分组背包问题)原创 2023-02-25 15:23:03 · 73 阅读 · 1 评论 -
背包问题(多重背包问题)
多重背包问题对比01背包问题,01背包问题是只有选和不选两种情况,多重背包是不止这两种情况,其实是01背包问题的一种扩展,只需要在状态转移时变化一下。考虑给定一个数s,最少把s分成多少个数,分别有选和不选两种方法,可以拼成小于等于s的所有数?如果数据范围1000~2000,采用二进制优化方法:把多重背包问题变成01背包问题。解法分成log2(s)下取整个数,s=7,则拆成2^0=1,2^1=2,2^2=4。如果s=7,分成1,2,4。原创 2023-02-25 15:02:43 · 212 阅读 · 0 评论 -
背包问题(完全背包问题)
01背包问题枚举的是选和不选两个集合,完全背包问题可以选无限多个,直到选到体积超过v为止,所以要划分为若干个子集。f[i][j]存的值是集合的哪个属性?(问的是啥就是啥,问最大值,属性就是最大值)f[i][j]表示的哪一个集合?所有只从前i个物品选,总体积不超过j的方案的集合。区别:完全背包问题每个物品可用无限次,01背包问题每个物品只能用1次。结论:完全背包问题就是01背包问题的遍历顺序相反。(区别在于i和i-1导致枚举时顺序相反)原创 2023-02-25 14:22:41 · 378 阅读 · 0 评论 -
背包问题(01背包问题)
1.f[i][j]状态只和f[i-1][j]有关,即只和前一层有关,所以用一维数组f[n]来表示体积是i的最大价值是多少,把f[i]的状态等价删除,即。:初始化时f[i]都是0,f[m]表示体积小于等于m的最大价值;f[ i ][ j ]表示只看前i个物品,总体积是j的情况下,总价值最大是多少,则result=max(f[n][0~v])2.选第i个物品,f[ i ][ j ]=f[ i-1 ][ j-v[ i ] ];1.不选第i个物品,f[ i ][ j ]=f[ i-1 ][ j ];原创 2023-02-25 13:40:22 · 86 阅读 · 0 评论