题目大意:
给出1*1,2*2,3*3,4*4,5*5,6*6,的正方形盒子数目,要求被装在6*6的盒子里,最少能够用几个盒子?
解题思路:
先从6*6盒子考虑,没有空余,5*5盒子有11个1*1空余,4*4剩下的空间先填充2*2,再填充1*1,3*3剩下的分为等于3,2,1时的情况讨论,最后分割2*2,1*1.
代码:
#include <iostream> using namespace std; int main() { int a,b,c,d,e,f,sum=0,k,z; while(cin>>a>>b>>c>>d>>e>>f&&(a+b+c+d+e+f)) { sum=0; sum+=f; sum+=e; a=a-e*11; sum+=d; if(d*5>=b) { a=a-(d*5-b)*4; b=0; } else b=b-d*5; if(c%4==0) { sum+=c/4; if(b%9==0) { sum+=b/9; if(a>0) sum+=(a+35)/36; } if(b%9!=0) { sum+=b/9+1; k=9-b%9; a=a-k*4; if(a>0) sum+=(a+35)/36; } } else if(c%4!=0) { z=b; sum+=c/4+1; k=4-c%4; if(k==3) b=b-5; if(k==2) b=b-3; if(k==1) b=b-1; if(b<=0) { a=a-(k*9-4*z); if(a>=0) sum+=(a+35)/36; } else { if(k==3) a=a-7; if(k==2) a=a-6; if(k==3) a=a-5; sum+=(b+8)/9; if(b%9==0) { if(a>0) sum+=(a+35)/36; } else { k=9-b%9; a=a-k*4; if(a>0) sum+=(a+35)/36; } } } cout<<sum<<endl; } return 0; }