pku 1017 Packets

题意:有六个形式的盒子 问至少需要多少个6x6的盒子才能装下这些盒子,盒子的类型为1X1,2X2,3X3,4X4,5X5,6X6。

算法:基本的贪心。

思路:首先是用6*6的装6*6的,然后用6*6的装5*5的再将剩余的空间装1*1的,再用6*6装4*4的,剩余的空间先装2*2的如果还有空间剩余再装1*1.在6*6装3*3是重点,显示看装三个个数,如果装的是4个那么没有空间剩余,如果装的三个3*3的那么可以装1个2*2的和5个1*1的,如果装的是两个3*3的那么可以装2*2的3个和1*1的6个,还有3*3的1个的时候可以装2*2的五个其他的全装1*1的,贪心思路先装大的后装小的

 

代码:(来源discuss讨论区)

#include <iostream>
using namespace std;
int main()
{
int a[10],i,j,sum,m,left1,left2;
int u[4]={0,5,3,1};
while (1)
{
sum=0;
for(i=1;i<=6;i++)
{
cin>>a[i];
sum+=a[i];
}
if(sum==0)
break;
m=a[6]+a[5]+a[4]+(3+a[3])/4;
left2=a[4]*5+u[a[3]%4];
if(a[2]>left2)
m+=(a[2]-left2+8)/9;
left1=m*36-a[6]*36-a[5]*25-a[4]*16-a[3]*9-a[2]*4;
if(a[1]>left1)
m+=(a[1]-left1+35)/36;
cout<<m<<endl;
}
return 0;
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值