poj1017

#include<stdio.h>
int fmax(int i,int j){
return i>j?i:j;
}

int main(){
int s1,s2,s3,s4,s5,s6;
int sum,tp,tp2;
while(scanf("%d%d%d%d%d%d",&s1,&s2,&s3,&s4,&s5,&s6),s1+s2+s3+s4+s5+s6){
sum=0;
sum+=s6;//6*6的箱子;
//s6=0;

sum+=s5;//5*5的箱子,剩下的用1*1来填充
//s5=0;
s1=fmax(0,s1-11*s5);//剩下的用1*1来填充

sum+=s4;//4*4的箱子,剩下的先用2*2再用1*1来填充
tp=s2;
s2=fmax(0,s2-(5*s4));//用2*2
if(s2==0&&tp!=0)
s1=fmax(0,s1-4*(s4*5-tp)); //s1=fmax(0,s1-(5-tp%5)*4);因为s4的箱子多出来的情况,所以注释里的s1是错误的


sum+=(s3+3)/4;//4个3*3填充一个箱子
tp=s3%4;//tp表示最后一个箱子已经填了几个3*3

if(tp==1){//可以填充5个2*2
if(s2==0){tp2=0;
s1=fmax(0,s1-27);}
if(s2==1){tp2=1;
s1=fmax(0,s1-23);}
if(s2==2){tp2=2;
s1=fmax(0,s1-19);}
if(s2==3){tp2=3;
s1=fmax(0,s1-15);}
if(s2==4){tp2=4;
s1=fmax(0,s1-11);}
if(s2>=5){tp2=5;
s1=fmax(0,s1-7);}

s2=fmax(0,s2-tp2);
}//填好了2*2再填1*1
else if(tp==2){
if(s2==0){tp2=0;
s1=fmax(0,s1-18);}
if(s2==1){tp2=1;
s1=fmax(0,s1-14);}
if(s2==2){tp2=2;
s1=fmax(0,s1-10);}
if(s2>=3){tp2=3;
s1=fmax(0,s1-6);}

s2=fmax(0,s2-tp2);
}
else if(tp==3){
if(s2==0){tp2=0;
s1=fmax(0,s1-9);}
if(s2>=1){tp2=1;
s1=fmax(0,s1-5);}

s2=fmax(0,s2-tp2);
}

sum+=(s2+8)/9;
tp=s2%9;
if(tp)
s1=fmax(0,s1-(36-4*tp));
sum+=(s1+35)/36;
printf("%d\n",sum);
}
return 0;
}

posted @ 2012-07-21 12:44  xxx0624  阅读(597)  评论(0编辑  收藏  举报