• poj1017 Packets


    参考了http://www.cnblogs.com/mycapple/archive/2012/08/23/2652070.html

    思路:

    贪心。

    实现:

     1 #include <iostream>
     2 #include <cstdio>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     int b1, b2, b3, b4, b5, b6; //不同大小的木块个数
     8     int nTotal = 0;             //最少需要的箱子数目
     9     int c1;                        //当前能放 1*1 木块的空格数目
    10     int c2;                        //当前能放 2*2 木块的空格数目
    11     int Contain2[4] = { 0, 5, 3, 1 }; //记录被3*3的占用之后,还剩多少给2*2的使用  
    12     while (cin >> b1 >> b2 >> b3 >> b4 >> b5 >> b6, b1 || b2 || b3 || b4 || b5 || b6)
    13     {
    14         nTotal = b6 + b5 + b4 + (b3 + 3) / 4; //只能装1个6*6的,1个5*5的,1个4*4的,
    15                                               //而3*3的需要多情况考虑,3*3的需要向上调整
    16                                               //这里有一个小技巧 (b3+3)/4 
    17                                               //正好等于b3除以4向上取整的结果,下同 
    18         c2 = 5 * b4 + Contain2[b3 % 4]; //放2*2的数目等于放一个4*4时需要5个2*2加上
    19                                         //放1到4个3*3时各需要的数目 ,即还可以装多少个2*2的  
    20         if (b2 > c2)    
    21             nTotal += (b2 - c2 + 8) / 9;  //向上调整 ,总的2*2的个数减去装过的2*2的个数,
    22                                           //得到剩余的2*2的个数,
    23                                           //此个数加上8然后除以9就正好等于它除以9向上取整的结果,
    24                                           //之所以总数要加上这个数是由于若单独装2*2,可以装9个
    25         c1 = 36 * nTotal - 36 * b6 - 25 * b5 - 16 * b4 - 9 * b3 - 4 * b2; //还可以装多少个1*1的 
    26         if (b1 > c1)    
    27             nTotal += (b1 - c1 + 35) / 36; //向上调整,总的1*1的个数减去装过的1*1的个数,
    28                                            //得到剩余的1*1的个数,
    29                                            //此个数加上35然后除以36就正好等于它除以36向上取整的结果
    30                                            //之所以总数要加上这个数是由于若单独装1*1,可以装36个
    31         cout << nTotal << endl;
    32     }
    33     return 0;
    34 }
  • 相关阅读:
    linux 开机启动设置
    Ubuntu安装Oracle时出现乱码,及其他安装错误
    ubuntu 设置DNS
    opencv cuda TK1 TX1 兼容设置
    int to string
    post文件的html
    vc 获得调用者的模块名称
    dlib landmark+人面识别
    android破解
    jquery $(document).ready() 与window.onload的区别
  • 原文地址:https://www.cnblogs.com/wangyiming/p/6589746.html
Copyright © 2020-2023  润新知