hdu 1069 Monkey and Banana (dp)
2015-10-28 20:04
302 查看
题目链接:
题意:把给定尺寸的长方体(数量不限)叠加在一起,叠加的条件是,上面一个长方体的长和宽比下面长方体的长和宽短,不能相等,长方体可以任意面朝下摆放,求这些长方体能叠加的最高的高度。
把每个长方体分成3个元素。然后就和矩形嵌套差不多了,排序之后求容量最大的子序列。
代码:
题意:把给定尺寸的长方体(数量不限)叠加在一起,叠加的条件是,上面一个长方体的长和宽比下面长方体的长和宽短,不能相等,长方体可以任意面朝下摆放,求这些长方体能叠加的最高的高度。
把每个长方体分成3个元素。然后就和矩形嵌套差不多了,排序之后求容量最大的子序列。
代码:
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> #include <iostream> #include <ctype.h> #include <iomanip> #include <queue> #include <stdlib.h> using namespace std; struct node { int x,y,h; }f[10100]; int cmp(node a,node b) { if(a.x==b.x) return a.y<b.y; return a.x<b.x; } int main() { int i,j,t,n,MAX,max1; int a,b,c,p=1; while(cin>>n&&n){ t=0; for(i=0;i<n;i++){ cin>>a>>b>>c; f[t].x=a,f[t].y=b,f[t++].h=c; f[t].x=b,f[t].y=a,f[t++].h=c; f[t].x=a,f[t].y=c,f[t++].h=b; f[t].x=c,f[t].y=a,f[t++].h=b; f[t].x=c,f[t].y=b,f[t++].h=a; f[t].x=b,f[t].y=c,f[t++].h=a; } sort(f,f+t,cmp); max1=f[0].h; for(i=1;i<t;i++){ MAX=0; for(j=0;j<t;j++) if((f[i].x>f[j].x&&f[i].y>f[j].y)||(f[i].y>f[j].x&&f[i].x>f[j].y)) MAX=max(MAX,f[j].h); f[i].h+=MAX; max1=max(max1,f[i].h); } printf("Case %d: maximum height = %d\n",p++,max1); } }
相关文章推荐
- 对象转为字符串
- Hicharts弄个样例
- linux监控服务平台搭建过程详解
- 在java中使用JDBC访问数据库
- Math对象中的random方法的具体应用
- mac 神奇时光机
- 简易的可拖动的桌面悬浮窗效果Demo
- 5.0 快捷键
- 在CentOS上完美安装配置Solr5
- Java验证码代码
- static修饰的变量和方法直接用类进行调用,不需要先用new创建新的方法就能调用
- LeetCode OJ:Binary Tree Maximum Path Sum(二叉树最大路径和)
- 输出高效的日志信息
- Math对象是个organizational object(集合的对象)
- 中国大学MOOC-陈越、何钦铭-数据结构 排序(希尔排序)
- 网页中图片旋转的几种实现方式
- C#操作剪贴板实现复制粘贴
- 状态压缩 UVALive 6068 The Little Girl who Picks Mushrooms (12长春C)
- 杜绝“野指针”
- 如何添加现有的虚拟机到Parallels Desktop中