POJ1017贪心

题意:小P开了一家淘宝店铺,店铺里所有的商品高度都为h,但长和宽分别为1*1,2*2,3*3,4*4,5*5,6*6六种规格。这一天来了一个大客户,他订购了很多物品。所以小P需要将东西都邮寄给他,但是小P只有高度为h,长宽为6*6的箱子,小P想知道自己最少需要用多少个箱子,才能把客户需要的所有物品都寄过去?(多组输入,遇到0 0 0 0 0 0结束)

题解:贪心的大水题,只要把握好从大到小放入箱子的同时,尽可能将箱子放满即可。

#include<stdio.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int inf = 0x3f3f3f3f;
typedef long long ll;
int n[10];
int main(void)
{
    ios::sync_with_stdio(false);
    while (cin >> n[1] >> n[2] >> n[3] >> n[4] >> n[5] >> n[6])
    {
        int flag = 0;
        for (int i = 1; i <= 6; i++)
        {
            if (n[i] != 0)
                flag = 1;
        }
        if (flag == 0)break;
        int ans = 0;
        ans += n[6];
        if (n[5] > 0)
        {
            ans += n[5];
            n[1] -= n[5] * 11;
            if (n[1] < 0)n[1] = 0;
        }
        if (n[4] > 0)
        {
            ans += n[4];
            if (n[2] >= n[4] * 5)
                n[2] -= n[4] * 5;
            else
            {
                int n1 = 20 * n[4] - n[2] * 4;
                n[2] = 0;
                n[1] -= n1;
                if (n[1] < 0)n[1] = 0;
            }
        }
        if (n[3] > 0)
        {
            if (n[3] % 4 == 0)
                ans += (n[3] / 4);
            else
            {
                ans += (n[3] / 4) + 1;
                n[3] = n[3] % 4;
                if (n[3] == 1)
                {
                    if (n[2] >= 5)
                    {
                        n[2] -= 5;
                        n[1] -= 7;
                        if (n[1] < 0)n[1] = 0;
                    }
                    else
                    {
                        n[1] -= (27 - n[2] * 4);
                        n[2] = 0;
                        if (n[1] < 0)n[1] = 0;
                    }
                }
                if (n[3] == 2)
                {
                    if (n[2] >= 3)
                    {
                        n[2] -= 3;
                        n[1] -= 4;
                        if (n[1] < 0)n[1] = 0;
                    }
                    else
                    {
                        n[1] -= (18 - n[2] * 4);
                        n[2] = 0;
                        if (n[1] < 0)n[1] = 0;
                    }
                }
                if (n[3] == 3)
                {
                    if (n[2] >= 1)
                    {
                        n[2]--;
                        n[1] -= 5;
                        if (n[1] < 0)n[1] = 0;
                    }
                    else
                    {
                        n[1] -= (9 - n[2] * 4);
                        n[2] = 0;
                        if (n[1] < 0)n[1] = 0;
                    }
                }
            }
        }
        if (n[2] > 0)
        {
            if(n[2]%9==0)
                ans += n[2] / 9;
            else
            {
                ans += n[2] / 9 + 1;
                n[2] = n[2] % 9;
                n[1] -= (36 - n[2] * 4);
                n[2] = 0;
                if (n[1] < 0)n[1] = 0;
            }
        }
        if (n[1] > 0)
        {
            if(n[1]%36==0)
                ans += n[1] / 36;
            else
                ans += n[1] / 36 + 1;
        }
        cout << ans << endl;
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/ZJNU-huyh/p/13210442.html