ACM第一次练习—1017R

题意: 所有的箱子都是6*6尺寸的,但是物品有1*1,2*2,3*3,4*4,5*5以及6*6尺寸的,要求把所有的物品放进箱子中,求最少需要多少箱子。

思路:对于6*6,5*5以及4*4尺寸的物品每个物品需要占有一个箱子,对于3*3的物品一个箱子可以放4个,2*2的物品箱子可以放9个,1*1的可以放36个。采用面积统计1*1箱子的空位,采用向上去整的方法统计箱子。

感想:这个题搞得我有点乱,费了很多时间。

代码:

#include<iostream>
#include<cstdio>
#include<cstring>


int num[4]={0,5,3,1};
int box[7];


int main()
{
    while(1){
        int tmp=0;
        for(int i=1;i<=6;i++){
            scanf("%d",&box[i]);    
            tmp+=box[i];
        }
        if(tmp==0)
            break;
        int ans=box[6]+box[5]+box[4]+(box[3]+3)/4;  
        int a2=box[4]*5+num[box[3]%4];  
        if(box[2]>a2)
            ans+=(box[2]-a2+8)/9;
        int a1=ans*36-box[6]*36-box[5]*25-box[4]*16-box[3]*9-box[2]*4;
        if(box[1]>a1)   
            ans+=(box[1]-a1+25)/36;
        printf("%d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(ACM第一次练习—1017R)