UVa 311 - Packets

来源:互联网 发布:淘宝代销什么产品好 编辑:程序博客网 时间:2024/06/03 17:15

题意:给出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;}


原创粉丝点击