完全背包

普通代码实现:

for(int i=0;i<n;i++){

      for(int j=0;j<=W;j++){

           if(j<w[i]) dp[i+1][j]=dp[i][j];

           else   dp[i+1][j]=max(dp[i][j],dp[i+1][j-w[i]]+p[i]);

}

cout<< dp[n][w];

代码优化:

int dp[maxn];

for(int i=0;i<n;i++){

      for(int j=w[i];j<=W;j++){

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

}

}

cout<<dp[w];

posted @ 2019-07-31 17:53  zw100  阅读(154)  评论(0编辑  收藏  举报