311

这个一开始上来没思路,感觉是贪心,但不知道怎么贪,看了看接替报告理解了:
先把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;
}
posted @ 2011-05-20 21:06  KOKO's  阅读(110)  评论(0编辑  收藏  举报