1. 程式人生 > >01背包基礎

01背包基礎

i++ 內存 -s 初始化 傳遞 01背包 滾動 clas 背包

  dp數組開的是 最大容量!!!!! 切記不要開成N

一般有兩種寫法

如果不要求打印的話

滾動數組更加省內存

初始化只要 0-s 全為0即可

 for(int i=1;i<=n;i++)
    for(int j=s;j>=v[i];j--)
      dp[j]=max(dp[j],dp[j-v[i]+w[i]);

普通01背包

初始化將dp[0][0-j]初始化為0即可

for(int i=1;i<=n;i++)
 for(int j=S;j>=0;j--)//這裏切記不能把j>=0改成 j>=v[i] 因為就算放不下也要把放不下的狀態傳遞下去
{ dp[i][j]=(i==1?0:dp[i-1][j]); if(j>=v[i]) dp[i][j]=max(dp[i][j],dp[i-1][j-v[i]]+w[i]);//註意是i-1 }

01背包基礎