POJ 1014 我连背包都不会了。。。囧。。。

View Code
 1 //Result:wizmann    1014    Accepted    824K    0MS    G++    1387B    
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <iostream>
 6 #include <algorithm>
 7 #include <bitset>
 8 
 9 using namespace std;
10 
11 #define print(x) cout<<x<<endl
12 #define input(x) cin>>x
13 #define SIZE 100000
14 
15 int array[12];
16 char dp[SIZE];
17 
18 //多重背包
19 //w - 重量  c - 费用  amount - 数量  v - 背包大小
20 //By Moody _"Kuuy"_ Wizmann
21 void CompletePack(int w,int c,int v) 
22 {
23     for(int i=0;i<=v;i++)  
24     {  
25         if(dp[i]) dp[i+w]=dp[i]+c;  
26     }
27 }
28 
29 void ZeroOnePack(int w,int c,int v)
30 {
31     for(int i=v;i>=0;i--)
32     {
33         if(dp[i] && i+w<=v) dp[i+w]=dp[i]+c;
34     }
35 }
36 
37 void MultiplePack(int w,int c,int amount,int v)
38 {
39     dp[0]=1;
40     if(w*amount>=v)
41     {
42         CompletePack(w,c,v);
43         return;
44     }
45     else
46     {
47         int k=1;  
48         while(k<amount)  
49         {  
50             ZeroOnePack(k*w,k*c,v);  
51             amount-=k;  
52             k<<=2;  
53         }
54         ZeroOnePack(amount*w,amount*c,v);
55     }
56 }  
57   
58 
59 int main()
60 {
61     freopen("input.txt","r",stdin);
62     int cas=1;
63     int sum=0;
64     while(1)
65     {
66         sum=0;
67         for(int i=1;i<=6;i++)
68         {
69             input(array[i]);
70             sum+=array[i]*i;
71         }
72         if(!sum) break;
73         print("Collection #"<<cas++<<":");
74 
75         if(sum%2) print("Can't be divided.");
76         else
77         {
78             memset(dp,0,sizeof(dp));
79             for(int i=1;i<=6;i++)
80             {
81                 MultiplePack(i,i,array[i],sum/2);
82                 if(dp[sum/2]) break;
83             }
84             
85             if(dp[sum/2]) print("Can be divided.");
86             else print("Can't be divided.");
87         }
88         puts("");
89     }
90     return 0;
91 }
92                 
93             

posted on 2012-05-16 13:50  Wizmann  阅读(143)  评论(0)    收藏  举报

导航