01背包

发布时间 2023-07-30 16:07:09作者: DLSQS

二维(内存爆啊啊啊啊啊啊啊啊啊啊啊啊啊啊)

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     }