解题思路
从面积大的开始取,一个6*6的箱子可以装一块5*5的产品剩下11个 1*1的空间。装一块4*4的板子剩下5个2*2的空间。 一个6*6的箱子可以取四块3*3的空间,在一块6*6箱子上装3*3的产品数目为 1 2 3 4 的时候剩下 2*2的板子分别为 5 3 1 0,剩余部分还可以去1*1的产品。 若2*2的板子有剩余,还可以分割成1*1的板子。
#include<cstdio> #include<cstring> int dir[4]={0,5,3,1}; int a[10]; int main() { int i,sum,ans; while(1) { sum=0; for(i=1;i<7;++i) { scanf("%d",&a[i]); sum+=a[i]; } if(!sum) break; ans=a[6]+a[5]+a[4]+(a[3]+3)/4;//计算边长为3 4 5 6的板子消耗量 int cnt_2=a[4]*5+dir[a[3]%4]; if(a[2]>cnt_2) ans+=(a[2]-cnt_2+8)/9;//当上面剩余的2*2板子量不足时,需要消耗新的板子 int cnt_1=ans*36-a[6]*36-a[5]*25-a[4]*16-a[3]*9-a[2]*4; if(a[1]>cnt_1)//当上面剩余的1*1板子量不足时,需要消耗新的板子 ans+=(a[1]-cnt_1+35)/36; printf("%d\n",ans); } return 0; }在这里直接参考了裁板子的思路,http://blog.csdn.net/zwj1452267376/article/details/50428543