POJ 1017

POJ 1017

http://poj.org/problem?id=1017

题意就是有6种规格的物品,给你一些不同规格的物品,要求你装在盒子里,盒子是固定尺寸的也就是6*6,而物品有1*1,2*2,3*3,4*4,5*5,6*6,给定你一些物品的数量,求最少的盒子的用量。

 思路:对于大的盒子先放,而小的盒子,如果可以填充的话,就填充,也是又大到小填充。分析多种情况即可

 1 #include <stdio.h>
 2 #include <iostream>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     int one,two,thr,fou,fiv,six,ans;
 9     while(1)
10     {
11         ans=0;
12         scanf("%d%d%d%d%d%d",&one,&two,&thr,&fou,&fiv,&six);
13         if(one==0&&two==0&&thr==0&fou==0&&fiv==0&&six==0) break;
14         ans+=six;
15         ans+=fiv;
16         if(fiv!=0)
17         {
18             if(one<fiv*11) one=0;
19             else one-=fiv*11;
20         }
21         ans+=fou;
22         if(fou!=0)
23         {
24             if(two>=fou*5) two-=fou*5;
25             else
26             {
27                 one-=(fou*5-two)*4;
28                 two=0;
29             }
30         }
31         if(thr%4==0) ans+=thr/4;
32         else
33         {
34             ans+=thr/4+1;
35             if(thr%4==1)
36                 if(two>=5)
37                 {
38                     two-=5;one-=7;
39                 }
40             else
41             {
42                 one-=(27-two*4);
43                 two=0;
44             }
45             if(thr%4==2)
46                 if(two>=3)
47                 {
48                     two-=3;one-=6;
49                 }
50             else
51             {
52                 one-=(18-two*4);
53                 two=0;
54             }
55             if(thr%4==3)
56                 if(two>=1)
57                 {
58                     two-=1;
59                     one-=5;
60                 }
61             else
62             {
63                 one-=(9-two*4);
64                 two=0;
65             }
66         }
67         if(two>0) {
68             if(two%9==0) ans+=two/9;
69             else {
70                 ans+=two/9+1;
71                 one-=(two/9+1)*36-two*4;
72             }
73         }
74         if(one>0){
75             if(one%36==0) ans+=one/36;
76             else {
77                 ans+=one/36+1;
78             }
79         }
80         printf("%d
",ans);
81     }
82     return 0;
83 }