首页 > 其他 > 详细

多重背包的两种做法

时间:2015-10-04 09:55:42      阅读:166      评论:0      收藏:0      [点我收藏+]

dp(i,j)=max(k->ti){dp(i-1,j-k*ci)+k*vi,dp(i,j)};

前 i 件物品在容量有 j 的最大价值是由

前i-1件物品容量为 j-k*ci 的容量的最大价值加上 k*vi 的最大值

k从0循环到ti(ti为物品的数量)

dp(i,j)要初始化为最小值

 

第二种方法

二进制拆解:

比如有一个物品有13件

2的0次方:13-2^0=12

2的1次方:12-2^1=10

2的2次方:10-2^2=6

2的3次方:因为6<8所以直接保留6;

然后就可以把这13件物品拆解为(2^0),(2^1),(2^2),(6)

这样1,2,4,6件物品,

  1. 每件物品1个,
  2. 每个物品的代价为原来的代价   *1,*2,*4,*6
  3. 每个物品的价值为原来价值      *1,*2,*4,*6

这样拆解每个物品可以拆解为log(t)个,最后用01背包做一遍就行了

多重背包的两种做法

原文:http://www.cnblogs.com/helloworld-c/p/4854146.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!