1877 打包(贪心,模拟)

又到了一年毕业季,Noder也从学校毕业了。现在Noder要把东西进行打包,打包完成后,Noder的所有东西都被装进了若干个长方体形状的收纳盒中,这些收纳盒的高都是1024,底座是正方形且边长都是1到6之间的整数。现在Noder要进行搬家了,他有一辆车,这个车子的后备箱是一个长方体,高为1024,底座为边长是6的正方形,那么Noder想知道,他最少要运几趟才能把他所有的东西运完呢?
输入
单组测试数据。
输入共一行,6个整数,从左到右依次表示底座边长为1到6的收纳盒个数。所有整数非负,且不超过1000。
输出
输出一个整数,表示最少的运送趟数。
输入样例

0 0 4 0 0 1
输出样例
2
从大物体往小物体装去,分情况讨论

#include<bits/stdc++.h>
using namespace std;
int num[7];
int main()
{
 int sum=0;
 for(int i=1;i<=6;i++)
  cin>>num[i];
 sum+=num[6]+num[5]+num[4];
 num[1]=max(0,num[1]-num[5]*11);
 int left=num[2]-5*num[4];
 if(left<0)
 {
 	num[2]=0;left*=-1;
 }
 else
 {
 	num[2]=left;left=0;
 }
 num[1]=max(0,num[1]-4*left);
 //cout<<sum<<" "<<num[1]<<" "<<num[2]<<" "<<num[3]<<endl;
 sum+=num[3]/4;
 num[3]%=4;
 if(num[3]==3)
 {
  sum++;
  if(num[2]>=1)
  {
  	num[2]--;num[1]=max(0,num[1]-5);
  }
  else
   num[1]=max(0,num[1]-9);
 }
 else if(num[3]==2)
 {
 	sum++;
 	int left=num[2]-3;
 	if(left<0) 
	{
	 left*=-1;num[2]=0;	
	}
 	else 
 	{
 	 num[2]=left;left=0;	
	}
	num[1]=max(0,num[1]-(6+4*left));
 }
 else if(num[3]==1)
 {
    sum++;
 	int left=num[2]-5;
 	if(left<0) 
	{
	 left*=-1;num[2]=0;	
	}
 	else 
 	{
 	 num[2]=left;left=0;	
	}
	num[1]=max(0,num[1]-(7+4*left)); 	
 }
 //
 sum+=num[2]/9;
 num[2]%=9;
 if(num[2])
 {
 	sum++;
 	num[1]=max(0,num[1]-4*(9-num[2]));
 }
 sum+=num[1]/36;
 num[1]%=36;
 if(num[1]) sum++;
 cout<<sum;
 return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值