poj bailian 1017装箱问题
2018-03-20 22:22
309 查看
没有对比,没有伤害!
我的代码
思路是贪心的思想,从大往小装,将盒子中剩余的空间,装小的。
每新增加一个盒子,就从大往小遍历一遍,尽可能装。
《程序设计导引及在线实践》 李文新等中的代码
思路是先不管盒子中空余的小空间,先把大小6-3的物品装进去,然后装2的,最后利用面积算出当前所有的碎片空间,装1,装完后,如果还剩余大小为1的物体,再开辟新的盒子。
后一个版本代码量少的原因有如下几点:
输入时避免循环
程序结构的设计
引入辅助数组util,去除循环
我的代码
思路是贪心的思想,从大往小装,将盒子中剩余的空间,装小的。
每新增加一个盒子,就从大往小遍历一遍,尽可能装。
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> using namespace std; int cnt[10],space[10]; void Fill(){ while(space[3]&&cnt[3]){ --space[3];--cnt[3]; } if(space[3]==1) {space[2]+=1;space[1]+=5;} if(space[3]==2){space[2]+=3;space[1]+=6;} if(space[3]==3){space[2]+=5;space[1]+=7;} while(space[2]&&cnt[2]) {--space[2];--cnt[2];} space[1]+=2*space[2]; while(space[1]&&cnt[1]) {--space[1];--cnt[1];} memset(space,0,sizeof(space)); } int main(){ while(1){ memset(cnt,0,sizeof(cnt)); memset(space,0,sizeof(space)); for(int i=1;i<=6;++i) scanf("%d",&cnt[i]); int s=0; for(int i=1;i<=6;++i) s+=cnt[i]; if(s==0) return 0; int ans=0; for(int i=6;i;--i){ if(cnt[i]==0) continue; if(i>3){ for(int j=cnt[i];j>0;--j){ --cnt[i]; ++ans; if(i==5) {space[1]+=11;Fill();} if(i==4) {space[2]+=5;Fill();} } } if(i==3){ ans+=cnt[3]/4; cnt[3]%=4; if(cnt[3]){ ans++;space[3]=4-cnt[3];cnt[3]=0; Fill(); } } if(i==2){ ans+=cnt[2]/9;cnt[2]%=9; if(cnt[2]){ ans++; space[1]=4*(9-cnt[2]); cnt[2]=0; Fill(); } } if(i==1&&cnt[1]){ ans+=(cnt[1]-1)/36+1; } memset(space,0,sizeof(space)); } cout<<ans<<endl; } return 0; }
《程序设计导引及在线实践》 李文新等中的代码
思路是先不管盒子中空余的小空间,先把大小6-3的物品装进去,然后装2的,最后利用面积算出当前所有的碎片空间,装1,装完后,如果还剩余大小为1的物体,再开辟新的盒子。
#include<cstdio> #include<iostream> #include<cmath> #include<cstring> using namespace std; int cnt[10],space[10]; int util[4]={0,5,3,1}; int main(){ int a,b,c,d,e,f,x,y; while(1){ scanf("%d%d%d%d%d%d",&a,&b,&c,&d,&e,&f); if(a+b+c+d+e+f==0) break; int ans=f+e+d+(c+3)/4; y=d*5+util[c%4]; if(b>y) ans+=(b-y+8)/9; x=36*ans-36*f-25*e-16*d-9*c-4*b; if(a>x) ans+=(a-x+35)/36; printf("%d\n",ans); } return 0; }
后一个版本代码量少的原因有如下几点:
输入时避免循环
程序结构的设计
引入辅助数组util,去除循环
相关文章推荐
- POJ 百练 1017: 装箱问题
- poj 1017装箱问题
- Poj 1017 / OpenJudge 1017 Packets/装箱问题
- POJ 1017 装箱问题 解题报告
- poj 1017装箱问题(贪心)
- Java实现POJ 1017:装箱问题
- POJ1017——装箱问题
- poj 1017 装箱问题
- POJ 1017 装箱问题 解题报告
- POJ 1017:装箱问题
- POJ 1017 装箱问题
- POJ | 1017装箱问题 摸鱼题解
- POJ 百练 1017: 装箱问题
- poj 1017 packets 装箱问题
- poj 1017 Packets 贪心 盒子放置问题
- (一般)POJ-1017 装载问题
- poj 1017 装箱子问题
- 百练1017:装箱问题
- 1017装箱问题
- 1017:装箱问题 百炼oj