二维(内存爆啊啊啊啊啊啊啊啊啊啊啊啊啊啊)
1 for (int i = 1; i <= n; i++) 2 for (int j = 1; j <= m; j++) { 3 if (j < v[i])//若当前背包容量装不下第i个物品 4 f[i][j] = f[i - 1][j];//不拿此物品,等价于拥有i-1个物品 5 else//装得下 6 f[i][j] = max(f[i - 1][j], f[i - 1][j - w[i]] + v[i]); 7 //装了第i个商品,背包容量减少w[i],但价值增加了v[i] 8 }
我就没见过二维的简单题,甚至一维的背包也没怎么见过
一维代码
1 for (int i = 1; i <= m; i++){ 2 for (int j = tt[i]; j <= t; j++) 3 dp[j] = max(dp[j], dp[j - tt[i]] + ww[i]); 4 }