mltang

博客园 首页 新随笔 联系 订阅 管理

类型: 有一个背包,容量为w,给你几种物品的体积和价值,问怎么放才能使背包总价值最高

数据:包包体积5      

3件物品 价值 3  5  4

    体积 2  4  1

上面的数字0-5代表背包容量为0-5时的情况

dp[i][j] = max(dp[i-1][j],dp[i-1][j-w[i]] + v[i])

讲真这个问题是dp的话

那么子问题是什么? 

----------------------------------

我今天突然觉得原问题是:k件物品,装进背包的总价值

子问题:k-1件物品装进背包的总价值  

这样解释的话应该就不难理解 f[i][j]  =  f[i-1][j-w[i]] + v[i]了

这不就是第i件物品加不加如的问题吗  

加进去的话就更新,不加就不更新

----------------------------------

dp[ i ][ j ] 表示 在总共考虑前i件物品,且背包容量为j时所能获得的最大价值

dp[i][j]的j不是说剩余容量,而是总容量

 

        for(i = 1; i <= n; ++i)
        {
            for(j = 0; j <= v; ++j)
            {
                dp[i][j] = dp[i-1][j];
                if(vol[i] <= j)
                    dp[i][j] = max(dp[i][j],dp[i-1][j-vol[i]] + value[i]);
            }
        }

 

posted on 2018-04-03 21:44  mltang  阅读(96)  评论(0编辑  收藏  举报