又到了一年毕业季,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;
}