zoukankan      html  css  js  c++  java
  • hoj 1094 Packets //poj 1017 Packets

    /*

     

    贪心:

        当为6*6时,只能用一个盒子装

        当为5*5时,可以每一个多装111*1的盒子

        当为4*4时,可以先装2*2的盒子,每一个4*4的可以装52*2,若2*2不够,则装1*1

        当为3*3时,每一个可以装43*3,若最后不足4个,先用2*2的装,空余的位置用1*1

        当为2*2时,每一个可以装92*2的,最后有剩余装1*1

        若最后还有1*1的,每36个可以装一盒,多的算多一盒

     

    */

    #include <iostream>

    #include <cstdio>

    using namespace std;

    #define X 7

    int a[X];

    int main()

    {

        freopen("sum.in","r",stdin);

        freopen("sum.out","w",stdout);

        while(scanf("%d%d%d%d%d%d",a+1,a+2,a+3,a+4,a+5,a+6),a[1]||a[2]||a[3]||a[4]||a[5]||a[6])

        {

           /////////////6

           int ans = a[6];

     

           /////////////5

           int temp = a[5]*11;

           ans += a[5];

           a[1] = max(0,a[1]-temp);//只能用1*1的装

     

           ////////////////4

           ans += a[4];

           temp = a[4]*5;

           if(temp>a[2])        //先用2*2的装

           {

               a[1] = max(0,a[1]-(temp-a[2])*4);//不够的话,用1*1

               a[2] = 0;

           }

           else

               a[2] -= temp;     //足够的2*2就用2*2的装就行

     

           ///////////3

           ans += (a[3]+3)/4;       //43*3一盒

           a[3] = a[3]%4;

           if(a[3])             //有剩余

           {

               if(a[2]>7-2*a[3])//2*2的够装的话

               {

                  a[2] -= 7-2*a[3];//注意到当a[3] = {1 2 3},对应的a[2] = {5 3 1},构造函数

                  a[1] = max(0,a[1]-8+a[3]);//剩下的用1*1

               }

               else              //2*2不够装的话,全用1*1的装

               {

                  a[1] = max(0,a[1]-(36-9*a[3]-4*a[2]));

                  a[2] = 0;

               }

           }

     

           ////////////////2

           ans += (a[2]+8)/9;       //9个装一盒

           a[2] = a[2]%9;

           if(a[2])

               a[1] = max(0,a[1]-36+a[2]*4);//剩下的用1*1的装

     

           ////////////////1

           ans += (a[1]+35)/36;

           printf("%d\n",ans);

        }

     

        return 0;

    }

  • 相关阅读:
    JS中的call()和apply()方法
    小鲜肉初学JS做得仿京东淘宝竖排二级导航
    OnClientClick="return confirm('确定要删除吗?')"
    sql主键的一点重要理解
    形态学对象的提取与屏蔽 (开操作和闭操作)
    水平竖直线及矩形方式提取结构
    形态学图像的膨胀与腐蚀
    自定义卷积核
    直线、矩形、圆、椭圆、文字等绘制
    霍夫变换圆形检测
  • 原文地址:https://www.cnblogs.com/yejinru/p/2436495.html
Copyright © 2011-2022 走看看