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 }