ACM第一次练习—1017R

本文探讨如何在有限的箱内放置不同尺寸的物品,通过优化策略减少所需箱子的数量,涉及数学计数和逻辑推理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意: 所有的箱子都是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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值