码迷,mamicode.com
首页 > 其他好文 > 详细

背包模板

时间:2015-07-24 22:29:03      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

 1 //每件物品只能使用一次
 2 void onezeropack(int v,int c)
 3 {
 4     int j;
 5     for(j=val; j>=v; j--)
 6     {
 7         f[j]=max(f[j-v]+c,f[j]);
 8     }
 9 }
10 //每件物品可以无限使用
11 void completepack(int v,int c)
12 {
13     int j;
14     for(j=v; j<=val; j++)
15     {
16         f[j]=max(f[j-v]+c,f[j]);
17     }
18 }
19 //每件物品有限次使用
20 void multiplepack(int v,int c,int num)
21 {
22     if(c*num>=val)
23     {
24         completepack(v,c);
25         return;
26     }
27     int k=1;
28     while(k<num)
29     {
30         onezeropack(k*v,k*c);
31         num=num-k;
32         k=k*2;
33     }
34     onezeropack(num*v,num*c);
35 }

注意 : 背包的第一重循环要自己写

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

调用其中一个函数

 

f[N]为dp数组

背包模板

标签:

原文地址:http://www.cnblogs.com/shanyr/p/4674667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!