我现在做的是编号为1017的试题,具体内容如下所示:
Problem R
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other)
Total Submission(s) : 88 Accepted Submission(s) : 20
0 0 4 0 0 1 7 5 1 0 0 0 0 0 0 0 0 0
2 1
解题思路:
放置箱子时,优先考虑尺寸大的箱子,4*4, 5*5, 6*6,都需要占用一个箱子,对于3*3的箱子,每四个正好占有一个箱子,然后判断是否有剩余空间,
如果有的话,把2*2的箱子放到空余的空间,如果还有剩余空间的话,判断1*1的箱子能放到剩余空间多少个,如果不够的话,再根据剩余的1*1和2*2规格的
箱子,看需要多少箱子。
编写代码:
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
int tab[]={0,5,3,1};
int slove(int a[])
{
int num3=ceil(a[3]/4.0);
int ans=a[6]+a[5]+a[4]+num3;
int num2=5*a[4]+tab[a[3]%4];
num2=min(num2,a[2]);
a[2]-=num2;
int rest=36*ans-a[6]*36-a[5]*25-a[4]*16-a[3]*9-num2*4;
rest=min(rest,a[1]);
a[1]-=rest;
rest=a[2]*4+a[1];
return ans+ceil(rest/36.0);
}
int main()
{
int a[10];
while(cin >> a[1])
{
int kase=a[1];
for(int i=2;i<=6;i++)
{
cin >> a[i];
if(a[i])
{
kase=1;
}
}
if(!kase)
{
break;
}
cout << slove(a) << endl;
}
return 0;
}