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]);
}

 

 
posted @ 2023-07-30 16:01  DLSQS  阅读(61)  评论(0)    收藏  举报