您的位置:首页 > 其它

关于01背包和完全背包二重循环的顺序(前人之技,后人惊叹)

2016-08-02 10:40 295 查看
01背包:   for(int I=1;i      for(int j=v;j>=cost[i];j--)           dp[j]=max(d[j],dp[I-cost[i]]+weight[I]); 为什么要从后往前循环!!!!       因为吧,从后往前循环,每次取得状态不会和你之前取得状态重合,这样就符合01背包的要求,每种物品只取一次;   完全背包:   for(int I=1;i      for(int j=cost[i];j<=t;j++)           dp[j]=max(d[j],dp[I-cost[i]]+weight[I]);      从前往后循环,每次取到的状态都会和前面的状态或多或少都有重叠,这样就刚好的满足了,每种物品无限取得要求了。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: