动态规划之背包问题 - 01背包+完全背包+多重背包

01背包

有n种不同的物品,每种物品分别有各自的体积 v[i]价值 w[i]  现给一个容量为V的背包,问这个背包最多可装下多少价值的物品。

1 for(int i = 1; i <= n; i++)
2     for(int j = V; j >= v[i]; j--)
3         dp[j] = max(dp[j], dp[j-v[i]]+w[i]);    //dp[V]为所求

完全背包

01背包每种物品只能取一个, 完全背包即物品不记件数,可取多件

1 for(int i = 1; i <= n; i++)
2     for(int j = v[i]; j <= V; j++)     //和01背包的不同 
3         dp[j] = max(dp[j],dp[j-v[i]+w[i]]);

多重背包

每种物品可取 件数h[i] 已经确定。

1 for(int i = 1; i <= n; i++)
2     for(int j = V; j >= v[i]; j--)
3         for(int k = 0; k <= h[i]; k++)
4             if(j >= k*v[i])
5                 dp[j] = max(dp[j],dp[j - k*v[i]] + k*w[i]);

 

这样还是都差不多可以理解了,明天再学多重背包的二进制分解优化(看了一下下 好像没看懂 hhhhh

今天就酱啦~  感觉自己ya 虚度光阴 学了好些时候了的也 今天一直在重复敲模板  希望明天能有进步! 

ヾ(•ω•`)o 白白 

 

posted @ 2018-08-11 22:14  愉也  阅读(396)  评论(0编辑  收藏  举报