题目大意:有sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6的packet和size 6*6的parcel,告诉你各种size的packet有多少,问最少能用几个parcel放下所有的packet。
学了一招:(p[3]+3)/4
#include<cstdio>
using namespace std;
int ans, p[10], a[4] = {0, 5, 3, 1};
int b[7] = {0, 1, 2, 3, 4, 5, 6};
void ini()
{
ans = 0;
for(int i=1; i<=6; i++) scanf("%d", &p[i]);
}
void f()
{
ans = p[6] + p[5] + p[4] + (p[3]+3)/4;//先将大物件放好
int t1 = p[4]*5+a[p[3]%4];
if(t1 < p[2]) ans += (p[2] - t1 + 8) / 9;
int t2 = ans*36-p[6]*36-p[5]*25-p[4]*16-p[3]*9-p[2]*4;
if(t2 < p[1]) ans += (p[1] - t2 + 35) / 36;
}
int main()
{
while(1){
ini();
if(!p[1] && !p[2] && !p[3] && !p[4] && !p[5] && !p[6]) break;
f();
printf("%d\n", ans);
}
return 0;
}