题意:给出1*1,2*2,3*3,4*4,5*5,6*6的正方形的个数,求能够拼出多少个6*6的正方形
解法:贪心,先放大的正方形,有些细节需要考虑清楚
#include <stdio.h>
using namespace std;
const int sq=36;
int main()
{
int a[10];
while(scanf("%d%d%d%d%d%d",&a[1],&a[2],&a[3],&a[4],&a[5],&a[6])==6)
{
int f=1,c=0;
for(int i=1; i<=6; i++)
{
if(a[i]!=0)
{
f=0;
break;
}
}
if(f==1)break;
while(1)
{
f=1;
for(int i=1; i<=6; i++)
{
if(a[i]!=0)
{
f=0;break;
}
}
if(f==1)break;
int p=sq;
if(a[6]>0)
{
p=0;
a[6]--;
}
else if(a[5]>0&&p>=25)
{
p-=25;
a[5]--;
if(a[1]>=11){p-=11;a[1]-=11;}
else {p-=a[1];a[1]=0;}
}
else if(a[4]>0&&p>=16)
{
p-=16;
a[4]--;
if(a[2]>=5){p-=20;a[2]-=5;}
else {p-=a[2]*4;a[2]=0;}
if(a[1]>=p){a[1]-=p;p=0;}
else {p-=a[1];a[1]=0;}
}
else if(a[3]>0&&p>=9)
{
if(a[3]>=4){p=0;a[3]-=4;}
else {p-=a[3]*9;a[3]=0;}
if(p==27)
{
if(a[2]>=5){p-=20;a[2]-=5;}
else {p-=a[2]*4;a[2]=0;}
if(a[1]>=p){a[1]-=p;p=0;}
else {p-=a[1];a[1]=0;}
}
else if(p==18)
{
if(a[2]>=3){p-=12;a[2]-=3;}
else {p-=a[2]*4;a[2]=0;}
if(a[1]>=p){a[1]-=p;p=0;}
else {p-=a[1];a[1]=0;}
}
else if(p==9)
{
if(a[2]>=1){p-=4;a[2]-=1;}
else {p-=a[2]*4;a[2]=0;}
if(a[1]>=p){a[1]-=p;p=0;}
else {p-=a[1];a[1]=0;}
}
}
else if(a[2]>0&&p>=4)
{
if(a[2]>=9){p=0;a[2]-=9;}
else {p-=a[2]*4;a[2]=0;}
if(a[1]>=p){a[1]-=p;p=0;}
else {p-=a[1];a[1]=0;}
}
else
{
if(a[1]>=36){a[1]-=36;p=0;}
else {p-=a[1];a[1]=0;}
}
c++;
}
printf("%d\n",c);
}
return 0;
}