POJ - 1017 贪心

版权声明:博主的博客不值钱随便转载但要注明出处 https://blog.csdn.net/easylovecsdn/article/details/84060984

这个题不难,关键是滤清思路,明确怎么放是最大利用空间的。

还有POJ不晓得为啥子,炸了好几天,这道题隔了好久才交上。

思路:

6*6:一个就要独占一个箱子

5*5:一个要独占一个箱子,放完后还可以再放11个1*1

4*4:一个要独占一个箱子,放完后可以再放5个2*2(先紧着大的放),然后如有空余再用1*1填补

3*3:这个比较麻烦,要把情况分开考虑(看我代码里分的情况)

2*2和1*1和上面思路一样;

代码写的不是很简洁,大家凑合看吧,反正是ac了;

#include <iostream>

using namespace std;

int a[7];

int main()
{
    while (!cin.eof())
    {
        int sum = 0;
        for (int i = 1; i <= 6; i++) {cin >> a[i]; sum += a[i];}

        if (!sum) break;

        int ans = 0;
        if (a[6]) ans += a[6];
        if (a[5])
        {
            ans += a[5];

            int area = a[5] * 11;

            a[1] = (a[1] - area) <= 0 ? 0 : (a[1] - area);
        }
        if (a[4])
        {
            ans += a[4];
            int area = 20 * a[4];
            if (a[2])
            {
                if (area - a[2] * 4 <= 0)
                {
                    a[2] -= (area / 4);
                    area = 0;
                }
                else
                {
                    area -= a[2] * 4;
                    a[2] = 0;
                }

            }

            if (area && a[1])
            {
                if (area - a[1] <= 0) a[1] -= area;
                else a[1] = 0;
            }
        }

        if (a[3])
        {
            ans += (a[3] / 4);
            a[3] %= 4;        //3*3还剩下一部分
            if (a[3]) {
                int area = 36 - (9 * a[3]);
                ans += 1;

                if (a[3] == 1)
                {
                    area = 27;
                    if (a[2])
                    {
                        if (a[2] <= 5)
                        {
                            area -= (4 * a[2]);
                            a[2] = 0;
                        }
                        else
                        {
                            area -= 20;
                            a[2] -= 5;
                        }
                    }

                    if (area)
                    {
                        if (a[1])
                        {
                            if (a[1] <= area) a[1] = 0;
                            else a[1] -= area;
                        }
                    }
                }
                else if (a[3] == 2)
                {
                    area = 18;
                    if (a[2])
                    {
                        if (a[2] <= 3)
                        {
                            area -= (4 * a[2]);
                            a[2] = 0;
                        }
                        else
                        {
                            area -= 12;
                            a[2] -= 3;
                        }
                    }

                    if (area)
                    {
                        if (a[1] >= area) a[1] -= area;
                        else a[1] = 0;
                    }

                }
                else if (a[3] == 3)
                {
                    if (a[2])
                    {
                        a[2] -= 1;

                        if (a[1])
                        {
                            if (a[1] <= 5) a[1] = 0;
                            else a[1] -= 5;
                        }
                    }
                    else
                    {
                        if (a[1])
                        {
                            if (a[1] <= 9) a[1] = 0;
                            else a[1] -= 9;
                        }
                    }

                }
            }
        }


        if (a[2])
        {
            ans += (a[2] / 9);
            a[2] %= 9;


            if (a[2])
            {
                int area = 36 - (4 * a[2]);

                a[1] = (a[1] - area <= 0) ? 0 : (a[1] - area);

                ans++;

            }
        }

        if (a[1])
        {
            ans += (a[1] % 36 == 0) ? (a[1] / 36) : (a[1] / 36) + 1;
        }

        cout << ans << endl;

    }
    return 0;
}
扫描二维码关注公众号,回复: 4140281 查看本文章

猜你喜欢

转载自blog.csdn.net/easylovecsdn/article/details/84060984