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

浙公网安备 33010602011771号