这个一开始上来没思路,感觉是贪心,但不知道怎么贪,看了看接替报告理解了:
先把4,5,6这种单独占一个包需要的包求出来,3的话每4个算一个包,
然后再算2的,按2的填前面那些包中的空隙,2的填完后如果2的还有剩余再添加包的个数,
最后把前面所有包剩余的空隙都按1的填,如果不够再添加包的个数
//============================================================================
// Name : 311.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cmath>
#include <cstdio>
using namespace std;
int a[7];
int one[5] = {0, 7, 6, 5}, two[5] = {0, 5, 3, 1};
int t, ans, ans1, ans2;
int main() {
while(scanf("%d%d%d%d%d%d", &a[1], &a[2], &a[3], &a[4], &a[5], &a[6])&&(a[1]||a[2]||a[3]||a[4]||a[5]||a[6]))
{
ans = 0;
ans = a[6]+a[5]+a[4]+ceil(a[3]/4.0);
ans2 = a[4]*5 + two[a[3]%4];
ans1 = a[5]*11 + one[a[3]%4];
if(ans2 < a[2]){
t = a[2]-ans2;
t = ceil(t/9.0);
ans += t;
ans1 += 4*(9*t-(a[2]-ans2));
}
else{
ans1 += 4*(ans2 - a[2]);
}
if(a[1] > ans1)
ans += ceil((a[1]-ans1)/36.0);
printf("%d\n", ans);
}
return 0;
}