2431
转换成背包问题就是,最大容量i
背包内最多折叠j
个的物品的最大价值
从结果来看犯了两个问题
- 折叠的顺序遍历: 我想的是我手上我有
k
个优惠,那么如果我当前要用优惠就等于k-1
的当前最大优惠 + 当前优惠。这样的想法没有问题但是顺序遍历会导致能多次购买优惠物品 - 先计算折叠: 先计算折叠只在样例
[0],[1],0,1
中出错,在这里先计算折叠后得出的是2. 这是因为大小为0的物品折叠以后也是0,也就是说dp[1][0] = 1
是我们折叠后的结论, 如果这时候我们再计算没折叠的值我们发现dp[1][0] = dp[1][最大容量0 - 物品大小0] + 价值1 = 2
多加了一次物品。这也提醒我们在同一个物品下i, k
并不是绝对不会再被用到的!当物品大小是0时就会被重复使用。要多多注意!!!
之前还犯了个先遍历折叠的错误。先遍历折叠会导致同一个物品的多次购买。