• POJ1017 Packets---贪心


    题目链接:

    https://vjudge.net/problem/POJ-1017

    题目大意:

    公司共有底面面积为1*1、2*2、3*3、4*4、5*5、6*6,高度同为H的六种产品,现在需要用最少的箱子打包,箱子的底面面积为6*6,高度为H。

    思路:

         简单的暴力贪心算法,对不同的产品有不同的策略,按照从大到小的顺序打包产品,策略如下:

         6*6:1个产品放在1个箱子里

         5*5:1个产品要占用1个箱子,用1*1的箱子可以填充(11个填满1箱)

         4*4:1个产品要占用1个箱子,剩余空间用2*2和1*1的箱子填充(先填充2*2,再填充1*1)

         3*3:4个产品可以填满1个箱子,假如有不满1个箱子的,分情况用1*1和2*2的产品填满

         2*2:9个产品可以填满1个箱子,假如有不满1个箱子的,用1*1的产品填充

         1*1:36个产品可填满一个箱子

     1 #include<iostream>
     2 #include<set>
     3 #include<map>
     4 #include<queue>
     5 #include<vector>
     6 #include<algorithm>
     7 #include<cstring>
     8 #include<cstdio>
     9 #include<cmath>
    10 using namespace std;
    11 typedef long long ll;
    12 
    13 int main()
    14 {
    15     int a, b, c, d, e, f;
    16     while(cin >> a >> b >> c >> d >> e >>f && (a + b + c + d + e + f))
    17     {
    18         int ans = d + e + f + (c + 3) / 4;
    19         int aa = a, bb = b, cc = c;
    20         aa -= e * 11;
    21         if(aa < 0)aa = 0;
    22         bb -= d * 5;
    23         if(bb < 0)
    24         {
    25             bb = 0;
    26             aa -= (d * 20 - b * 4);
    27             if(aa < 0)aa = 0;
    28         }
    29         if(c % 4 == 3)
    30         {
    31             if(bb >= 1)
    32             {
    33                 bb--;
    34                 aa -= 5;
    35             }
    36             else
    37             {
    38                 aa -= 9;
    39             }
    40         }
    41         else if(c % 4 == 2)
    42         {
    43             if(bb >= 3)bb -= 3,aa -= 6;
    44             else if(bb == 2)bb = 0,aa -= 10;
    45             else if(bb)bb = 0, aa -= 14;
    46             else a -= 18;
    47         }
    48         else if( c % 4 == 1)
    49         {
    50             if(bb >= 5) bb -= 5, aa -= 7;
    51             else 
    52             {
    53                 bb = 0;
    54                 if(bb == 4)aa -= 11;
    55                 else if(bb == 3)aa -= 15;
    56                 else if(bb == 2)aa -= 19;
    57                 else if(bb == 1)aa -= 23;
    58                 else aa -= 27;
    59             }
    60         }
    61         else;
    62         if(aa < 0)aa = 0;
    63         if(bb < 0)bb = 0;
    64         ans = ans + (bb * 4 + aa + 35) / 36;
    65         cout<<ans<<endl;
    66     }
    67 }
  • 相关阅读:
    Sgu294He's Circles
    [HNOI2008]Card洗牌
    传球游戏
    [BZOJ1478]Sgu282 Isomorphism
    [POJ2154]Color
    [ZOJ1961]Let it Bead
    BZOJ1257 [CQOI2007]余数之和sum
    BZOJ1192 [HNOI2006]鬼谷子的钱袋
    BZOJ4614 [Wf2016]Oil
    BZOJ3209 花神的数论题
  • 原文地址:https://www.cnblogs.com/fzl194/p/8696260.html
Copyright © 2020-2023  润新知