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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值