poj1017 最优解问题

题意:有六种高度相同的盒子x*x,现在输入每一种盒子的个数,求用6*6的盒子最少用几个。
这道题看似简单,但是考验的是算法的优化,一种简便的算法感动了我。这个方法不是我想到的。
直接代码:

#include<stdio.h>
int main()
{
    int b1,b2,b3,b4,b5,b6;
    while(scanf("%d%d%d%d%d%d",&b1,&b2,&b3,&b4,&b5,&b6)!=EOF)
    {
        int box=0;
        int m=0,n=0;//m2*2可放个数,n是1*1可放个数
        int a[4]={0,5,3,1};//3*3放完之后其剩下空间可放2*2的个数分四种情况
        if(b1==0&&b2==0&&b3==0&&b4==0&&b5==0&&b6==0)
            break;
        box=b6+b5+b4+(b3+3)/4;//有个小技巧可以b3/4+1
        m=a[b3%4]+b4*5;
        if(b2>m)
            box=box+(b2-m+8)/9;
        n=box*36-36*b6-25*b5-16*b4-9*b3-4*b2;//真是太绝了
        if(b1>n)
            box=box+(b1-n+35)/36;
        printf("%d\n",box);
    }
    return 0;
}

你可能感兴趣的:(poj)