贪心,用到了许多小技巧,向下取整等。
CODE:
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;
int u[4] = {0, 5, 3, 1}; //以三的剩余个数进行分类
int main()
{
int one, two, three, four, five, six;
while(scanf("%d%d%d%d%d%d", &one, &two, &three, &four, &five, &six))
{
int tot = 0;
if(one == 0 && two == 0 && three == 0 && four == 0 && five == 0 && six == 0) break;
tot = six + five + four + (three+3)/4; //向下取整,计算3x3需要的空间。
int y = four*5 + u[three%4]; //计算可以容纳2x2箱子的个数
if(two > y) tot += (two-y+8)/9; //向下取整
int dif = 36*tot - 36*six - 25*five - 16*four - 9*three - 4*two; //剩余可以容纳1x1箱子的个数
if(one > dif) tot += (one-dif+35)/36; //向下取整
printf("%d\n", tot);
}
return 0;
}
#include <cstdlib>
#include <cstring>
#include <cstdio>
using namespace std;
int u[4] = {0, 5, 3, 1}; //以三的剩余个数进行分类
int main()
{
int one, two, three, four, five, six;
while(scanf("%d%d%d%d%d%d", &one, &two, &three, &four, &five, &six))
{
int tot = 0;
if(one == 0 && two == 0 && three == 0 && four == 0 && five == 0 && six == 0) break;
tot = six + five + four + (three+3)/4; //向下取整,计算3x3需要的空间。
int y = four*5 + u[three%4]; //计算可以容纳2x2箱子的个数
if(two > y) tot += (two-y+8)/9; //向下取整
int dif = 36*tot - 36*six - 25*five - 16*four - 9*three - 4*two; //剩余可以容纳1x1箱子的个数
if(one > dif) tot += (one-dif+35)/36; //向下取整
printf("%d\n", tot);
}
return 0;
}