DP-背包问题

  1.0-1背包问题

  问题描述:有n件物品,每件商品的质量为w[i],价值为从c[i]。现有一个质量为V的背包,问如何选取物品放进背包,使得背包内物品的总价值最大。每种商品只有一件。

  分析1:令dp[i][v]表示前i件商品恰好装入容量为v的背包中所能获得的最大价值。那么,对于第i件商品而言,它可以放入或者不放入。如果放入的话,问题就转化为前i-1件商品恰好装入容量为v-w[i]的背包中,所能获得的最大价值,此时dp[i][v]=dp[i-1][v-w[i]]+c[i]。如果不放的话,问题就转化为前i-1件商品恰好装入容量为v的背包中所能获得的最大价值,此时dp[i][v]=dp[i-1][v]。所以转移方程为dp[i][v]=max(dp[i-1][v-w[i]]+c[i],dp[i-1][v]),边界dp[0][v]=0,所以枚举i从1到n,v从0到V。

  

for(int i=1;i<=n;i++){
    for(int v=w[i];v<=V;v++){
        dp[i][v]=max(dp[i-1][v],dp[i-1][v-w[i]]+c[i])
    }
}
View Code

 

posted @ 2018-12-26 15:27  阳光zfc  阅读(121)  评论(0)    收藏  举报