UVA437
2015-10-08 19:52
316 查看
题意: N个立方体,给出长宽高,把他们堆起来,最高能堆多高,要求在下面的立方体的长宽严格大于在上面的。
其实原本我是不会的,然后看了网上大神的做法 = =详见代码
其实原本我是不会的,然后看了网上大神的做法 = =详见代码
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node { int c,k,g; void init(int x,int y,int z) { c=x; k=y; g=z; } }a[200]; int len[200]; bool cmp(node x,node y) { return (x.c*x.k)<(y.c*y.k); } int main() { int n,x,y,z,cnt=0; while(scanf("%d",&n)!=EOF && n) { int m=0; for(int i=0;i<n;i++) { scanf("%d%d%d",&x,&y,&z); // 立方体的六种摆放方法全部存起来 a[m++].init(x,y,z); a[m++].init(x,z,y); a[m++].init(y,x,z); a[m++].init(y,z,x); a[m++].init(z,x,y); a[m++].init(z,y,x); } sort(a,a+m,cmp); // 按照底面积排个序 ,在上面的立方体底面积一定小 int mx=-1; len[0]=1; for(int i=1;i<m;i++) // LIS 求最高高度 { len[i]=a[i].g; for(int j=0;j<i;j++) { if((a[i].c>a[j].c) && (a[i].k>a[j].k)) { len[i]=max(len[i],len[j]+a[i].g); mx=len[i]>mx?len[i]:mx; } } } printf("Case %d: maximum height = %d\n",++cnt,mx); } return 0; }
相关文章推荐
- LeetCode OJ:Valid Palindrome(验证回文)
- 关于一些对location认识的误区
- CYC-爱心暖暖的小动画
- UESTC 1712 Easy Problem With Numbers 除法对和数取模,分解,线段树
- Java 安全套接字编程以及 keytool 使用最佳实践
- 第6周项目2--建立链栈算法库
- NSUserDefaults
- 【前端学习】javascript作用域(链)和this
- UIScorollView运用与属性详解
- 最小生成树之prim算法
- 仓储管理流程图
- 导入https证书
- 地图的基础使用
- 使用 TestLink 进行测试管理
- 【mongoDB高级篇③】综合实战(1): 分析国家地震数据
- 最大子序列和
- hdu2795 Billboard 线段树
- superoj441 餐巾计划
- iOS开发 大文件下载封装
- hadoop namenode切换