1017-R

来源:互联网 发布:淘宝的卖家中心不见了 编辑:程序博客网 时间:2024/05/17 22:51
        1.题目编号:1017-R
2.简单题意:有1*1、2*2、3*3、4*4、5*5、6*6大小的盒子,用6*6大小的盒子去装给出的箱子,求出用的最少的盒子数,输入6组数据,分别代表有1*1、2*2、3*3、4*4、5*5、6*6大小的盒子的个数。
3.解题思路形成过程:一个箱子里只能放下一个4*4或5*5或6*6大小的箱子,它们有多少个,就至少需要多少个箱子,再将其他的往里塞,先从最大的开始,一步一步来,有一个6*6盒子,总数加一,有一个5*5也是,但一个包装箱能放1个5*5的盒子和11个1*1的盒子,然后是4*4,只能放1个4*4盒子和5个2*2盒子,2*2盒子不够的空间用1*1的盒子补,4个3*3的盒子组成一个6*6的箱子,所以用了向上取整的方法,如果%4为0,那就需要一个箱子,不为4也需要一个箱子,填充别的,而且尽可能多的放置2*2盒子   放完后放1*1盒子。
4.感想:这道题看起来思路有,但做起来条件太多,有好几次都是漏下条件使代码不正确,思考问题一定要全面,多方面考虑,有些会有简易算法,要考虑细节问题,细节决定成败。
#include<cmath>#include<iostream>using namespace std;int main(){    int a,b,c,d,e,f;    while(cin>>a>>b>>c>>d>>e>>f&&(a+b+c+d+e+f))    {      int sum=0;      sum=f+e+d;      if(a!=0)         a=max(0,a-11*e);      if(b>=d*5)         b=b-d*5;      else      {          a=max(0,a-4*(d*5-b));          b=0;      }      sum+=(c+3)/4;//向上取整      c%=4;      if(c)      {           if(b>=7-2*c)           {                  b-=7-2*c;                  a=max(0,a-(8-c));           }            else           {                 a=max(0,a-(36-4*b-9*c));                 b=0;           }       }       sum+=(b+8)/9;       b%=9;       if(b)       {             a=max(0,a-(36-b*4));             b=0;       }       sum+=(a+35)/36;       cout<<sum<<endl;    }    return 0;}


5.AC代码:
0 0
原创粉丝点击