目录
之前学过一遍,但是12月2日再练忘光光了:
【模板】完全背包_牛客题霸_牛客网 (nowcoder.com)
忘记点1 —— 为什么每个物品要遍历k件:
(这个属于逻辑没想清楚了,动态规划的“延伸遍历”逻辑)
买k件和买3件4件会对应之前不同的体积,那就会对应不同的价格,所以遍历件数比大小是有必要的
但还是超时了😭,所以得优化
忘记点2 —— 数学优化:
下面这个细一点
dp[i][j] 和 dp[i][ j-v[i] ] 最后一项都是体积无限逼近于0的
下面划线部分都加个w[i]就等价于上面那部分,所以计算上面那部分的时候没必要再遍历一遍了(这个就类似于“记忆化”,也正是优化了)
其实直接逻辑上想也可以
每件物品可以选无数次,那么dp[ i ][ j ] 就可以是 dp[ i ][ j - v[ i ] ] + w[ i ]。即基于上一次入背包来入背包。
“(注意滚动数组的话,它看的是j-v[i],所以要从前往后)”
所以滚动数组是正序的也好理解了。
有了式子应该就会了吧😚