poj 1017 Packets Cable master

链接http://poj.org/problem?id=1017

这题是《程序设计引导及在线实践》上的题 ”装箱问题“

题意就不说了。

解法是贪心,先装大的,大的装不满再装小的,直到装满或用完箱子。

《程序设计引导及在线实践》上把各种情况分析的很清楚。只是想不出书上的代码。

 

#include<iostream>
using namespace std;
int main()
{
	int p1,p2,p3,p4,p5,p6,a,r;//r为每种情况剩余体积
	int sum;
	while(scanf("%d%d%d%d%d%d",&p1,&p2,&p3,&p4,&p5,&p6),p1+p2+p3+p4+p5+p6)
	{
		sum=0;
		sum=sum+p6+p4+p5+p3/4;
		if(p5)
		{
			r=36*p5-5*5*p5;
			while(r&&p1) {p1--;r--;}
		}
		if(p4)
		{
			r=36*p4-4*4*p4;
			while(p2&&r){p2--,r=r-2*2;}
			while(r&&p1){r--;p1--;}
		}
		if(p3)
		{
			if(p3%4!=0) sum++;
			if(p3%4==1)
			{
				r=36-3*3*1;
				for(a=1;a<=5&&p2;a++)
				{
					r=r-2*2;
					p2--;
				}
				while(r&&p1){r--;p1--;}
			}
			if(p3%4==2)
			{
				r=36-3*3*2;
				for(a=1;a<=3&&p2;a++)
				{
					r=r-2*2;
					p2--;
				}
				while(r&&p1){r--;p1--;}
			}
			if(p3%4==3)
			{
				r=36-3*3*3;
				if(p2){p2--;r=r-2*2;}
				while(r&&p1){r--;p1--;}
			}
		}
		if(p2)
		{
			sum=sum+p2/9;
			if(p2%9)
			{
				r=36-4*(p2%9);
				while(p1&&r){r--;p1--;}
				sum++;
			}
		}
		if(p1)
		{
			sum=sum+p1/36;
			if(p1%36) sum++;
		}
		printf("%d\n",sum);
	}
	return 0;
}


 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值