POJ 1017-Packets

本文详细介绍了一个基于贪心策略解决特定问题的算法实现。通过具体的代码示例,文章解释了如何处理不同类型的物品放入特定大小的箱子中以最大化利用空间的问题。关键点包括正确处理整数除法、理解不同箱子的容量特性以及如何从大到小地放置物品。

这本来是一个简单的贪心题,但是我写的有点罗嗦了,这题只要把握住三点就行了:

1. a/b是向下去整,我们要事先将a 变成 a+b-1,这样除法才不会错误。

2. 把握6 * 6的箱子能放几个 各种类型的物品。

3. 从大的放起,剩余空间要利用好,也就是要贪心。

#include<cstdio>
#include<cstring>
#include<cstdlib>

int a[7] = { 0};
int res[5] = { 0};
int ans;

int main()
{
while( scanf( "%d", &a[1]) == 1)
{
for( int i = 2; i < 7; i ++)
scanf( "%d", &a[i]);
if( a[1] + a[2] + a[3] + a[4] + a[5] + a[6] == 0)
break;
memset( res, 0, sizeof res);
ans = a[6];
if( a[5] != 0) {
ans += a[5];
res[1] += 11 * a[5];
}
if( a[4] != 0)
{
ans += a[4];
res[2] += 5 * a[4];
}
if( a[3] != 0)
{
ans += ( a[3] + 3 ) / 4;
res[3] += 4 - a[3] % 4;
if( res[3] == 1)
{
res[2] ++;
res[1] += 5;
}
else if( res[3] == 2)
{
res[2] += 3;
res[1] += 6;
}
else if( res[3] == 3)
{
res[2] += 5;
res[1] += 7;
}
}
if( a[2] != 0)
{
if( a[2] >= res[2])
{
a[2] -= res[2];
res[2] = 0;
}
else
{
res[2] -= a[2];
res[1] += res[2] * 4;
a[2] = 0;
}
if( a[2] > 0)
{
ans += (a[2] + 8) * 4 / 36;
res[1] += (9 - a[2] % 9) * 4;
}
}
if( a[1] != 0)
{
if( a[1] >= res[1])
a[1] -= res[1];
else
a[1] = 0;
}
ans += (a[1] + 35) / 36;
printf( "%d\n", ans);
}
return 0;

}

 

转载于:https://www.cnblogs.com/Yu2012/archive/2011/12/17/2291480.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值