1. 程式人生 > >動態規劃背包問題—完全背包

動態規劃背包問題—完全背包

spa 規劃 span 動態規劃 size 完全背包 價值 動態 背包

感覺背包問題是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]);
    }
} 

動態規劃背包問題—完全背包