bnuoj_4057 魔方系列——最小装箱
来源:互联网 发布:如何做股票数据回测 编辑:程序博客网 时间:2024/05/08 20:18
reamFox为了发展地大的魔方水平,经常会到世界盲拧记录保持者瓦西里处去进货一些魔方。进货的魔方一共有6种,分别是1*1, 2*2, 3*3, 4*4, 5*5, 6*6.(当然魔方是立体的,但为了问题简化我们就只看平面吧,即假设所有魔方的高度和箱子一样高)。而且瓦西里前辈为了减少麻烦,只提供一种6*6大小的箱子。就是无论你买多少魔方,全部都得装到这种6*6的箱子里。
现在问题来了,DreamFox发现,如果有效的放置魔方的位置,就可以使需要的箱子尽可能的少。但是如何让箱子最少呢?DreamFox这个人比较懒,所以请你编写一个程序计算需要箱子的最小值。
intput:
第1行:N,有N组数据(N < 300)。
第2..N+1行:有6个数,分别代表1*1, 2*2, 3*3, 4*4, 5*5, 6*6的魔方的个数。
output:
N行:每组数据的最小箱子数
sample:
20 0 4 0 0 1 7 5 1 0 0 0
21
//平面填充#include<stdio.h> int main(){ int a[7],s1,s,n,i,x1,x2; scanf("%d",&n); while(n--){ for(i=1;i<=6;i++) scanf("%d",&a[i]); s=0; s+=a[6]+a[5]+a[4]+a[3]/4;//在只考虑填边长6,5,4,3时需的最少6*6方格数 if(a[3]%4>0) s+=1; x2=a[6]*0+a[5]*0+a[4]*5; if(a[3]%4==1) {x2+=5;s1=36-20-9;} // 在只有一个3边长的方格里最多放5个2边长 4*5=20 1*3*3=9 if(a[3]%4==2) {x2+=3;s1=36-12-18;}// 这个最多放3个 3*4=12 2*3*3=18 if(a[3]%4==3) {x2+=1;s1=36-4-27;} //s1是剩余面积也是能还能填1边长的数目 x1=a[6]*0+a[5]*11+a[4]*0+s1; //在只考虑6,5,4,3的最小方格数情况下组合填(因为有空隙)1,2边长时(最优数目)=x1(需1边长数)+x2(需2边长数); if(a[2]>=x2) { //在真实的条件情况下:调整箱子数。 a[2]-=x2; if(a[1]>=x1) a[1]-=x1; else a[1]=0; s+=(a[1]+a[2]*4)/36; if((a[1]+a[2]*4)%36>0) s+=1; } else if(a[2]<x2){ x2-=a[2]; x1+=x2*4; //1个当4个 x2->x1 a[1]-=x1; if(a[1]>0) s+=a[1]/36; //方格的面积:36 if(a[1]%36>0) s+=1; } printf("%d\n",s); }return 0;}
0 0
- bnuoj_4057 魔方系列——最小装箱
- 魔方系列——最小装箱
- BNUOJ-4057-魔方系列——最小装箱
- BNUOJ 4057 魔方系列——最小装箱【细节题】
- bnuoj_4047 魔方系列——相同高度
- C#系列教程——装箱转换
- 动态规划——背包系列之装箱问题
- C#系列教程——装箱取消转换
- 菜鸟系列——最小生成树
- C#系列教程——对一个对象的装箱取消转换
- [C#基础知识系列]——装箱和拆箱探索总结
- c#——装箱 & 拆箱
- 魔方
- 魔方
- 魔方
- 魔方
- 魔方
- 魔方
- 【matlab】向量中选择元素插入该向量的位置
- android 第三方支付之支付宝使用详解
- gem包管理器讲解
- The file “XXX.app” couldn’t be opened because you don’t have permission to view it.
- Java+TestNG 测试Restful service
- bnuoj_4057 魔方系列——最小装箱
- 关于C#GB2312编码问题
- 决策树之 C4.5 算法
- moravec、harris、Shi-Tomasi角点检测的简介及OpenCV代码实现
- C/C++强制类型转换
- Oracle中常用sql函数(2)
- 直播平台的高并发架构设计2-需求
- 虚拟现实-VR-UE4-创建第一个C++项目——Hello word
- 正益移动王国春:布局在是与不是之间