啊我还是太弱了居然要收录模板 


1.各种简单背包

 1 //01背包
 2 int v[],w[],f[];//价值,重量,DP 
 3 for(int i=1;i<=n;i++)
 4 {
 5     for(int j=m;j>=0;j--)
 6     {
 7         if(j>=w[i])
 8         {
 9             f[j]=max(f[j],f[j-w[i]]+v[i]);
10         }
11     }
12 }
13 
14 //完全背包 
15 int v[],w[],f[];//价值,重量,DP 
16 for(int i=1;i<=n;i++)
17 {
18     for(int j=0;j<=m;j++)
19     {
20         if(j>=w[i])
21         {
22             f[j]=max(f[j],f[j-w[i]]+v[i]);
23         }
24     }
25 }
26 
27 //多重背包
28 int v[],w[],f[],t[],wl[],vl[]; //价值,重量,DP,数量,拆包后的重量与价值 
29 int cnt=0;
30 for(int i=1;j<=n;i++)
31 {
32     int k=1;
33     while(t[i]>k)
34     {
35         t[i]-=k;
36         wl[++cnt]=k*w[i];
37         vl[cnt]=k*v[i];
38         k<<=1;
39     }
40     w[++cnt]=w[i]*t[i];
41     v[cnt]=w[i]*t[i];
42 }
43 for(int i=1;i<=cnt;i++)
44 {
45     for(int j=m;j>=0;j--)
46     {
47         if(j>=wl[i])
48         {
49             f[j]=max(f[j],f[j-wl[i]]+vl[i]);
50         }
51     }
52 }
基础背包

相关文章: