动态规划背包问题—完全背包

感觉背包问题是dp中最好理解的了

定义:大小为i的背包最多能装的价值

转移方程 f(i)=max{f(i-w[j])+v[j]}

其中w[j]指的是第j件物品的重量,而v[j]指的是第j件物品的价值

代码实现(1)

for(int i=0;i<=m;i++)//容量 
{
    for(int j=1;j<=n;j++)//物品的个数 
    {
        if(i-w[j]>=0)//如果能装下 
        {
            f[i]=max(f[i],f[i-w[j]]+v[j]);//装或者不装 
        }
     } 
} 

代码实现(2)

for(int i=1;i<=n;i++)//这个还要更好理解些吧 
{
    for(int j=w[i];j<=m;j++)//我们背包的容量至少都是物品的重量 
    {
        f[j]=max(f[j-w[i]]+v[i],f[j]);
    }
} 

 

posted @ 2019-05-03 12:03  JBLee  阅读(360)  评论(0编辑  收藏  举报