您的位置:首页 > 其它

1017-R

2016-03-31 23:34 281 查看
        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代码:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  acm 贪心算法