HDU 1069
2016-04-05 20:23
190 查看
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=1000; typedef struct name { int a,b,c; }cube; int n,d[3]; int dp[maxn]; cube maze[maxn]; int cmp(cube x,cube y) { if(x.a>y.a) return 1; if(x.a==y.a&&x.b>y.b) return 1; return 0; } int main() { int k,sum,kase=1; while(scanf("%d",&n)!=EOF&&n!=0) { k=0; for(int i=0;i<n;i++) { scanf("%d%d%d",&d[0],&d[1],&d[2]); sort(d,d+3); maze[k].a=d[2];maze[k].b=d[1];maze[k].c=d[0];k++; maze[k].a=d[2];maze[k].b=d[0];maze[k].c=d[1];k++; maze[k].a=d[1];maze[k].b=d[0];maze[k].c=d[2];k++; } sort(maze,maze+k,cmp); /* for(int i=0;i<k;i++) printf("%d %d %d\n",maze[i].a,maze[i].b,maze[i].c);*/ for(int i=0;i<k;i++) dp[i]=maze[i].c; for(int i=k-2;i>=0;i--) { for(int j=i+1;j<k;j++) { if(maze[i].a>maze[j].a&&maze[i].b>maze[j].b) { if(dp[i]<dp[j]+maze[i].c) dp[i]=dp[j]+maze[i].c; } } } sum=dp[0]; for(int i=0;i<n;i++) { if(sum<dp[i]) sum=dp[i]; } printf("Case %d: maximum height = %d\n",kase++,sum); } return 0; }忏愧啊,这个题完全是看别人的解题报告才明白的,这个题不同于以往我做的一些DP,这个是需要考虑多个因素的最长递减子序列,题目比较花哨,容易让人心生畏惧,仍需要好好努力学习啊
相关文章推荐
- POJ 1562Oil Deposits,zoj1709
- 自定义ORM注解实现生成查询语句
- Leetcode no. 335
- 记事本
- 中科院分词工具NLPIR初始化失败
- 算法: 快速算法
- Python列表和元组
- 排序-堆排序
- 2016年上半年系统集成中项4月4日作业
- 程序运行时的内存空间分布(二)堆和栈的比较
- 捷通华声面试总结(待更新)
- 山东省第二届ACM省赛题——Binomial Coeffcients(组合)
- Android RecyclerView 使用完全解析 体验艺术般的控件
- Codeforces Round #252(Div. 2) 441D. Valera and Swaps 置换群
- VS2013常用快捷键:
- unix环境多进程编程----用到的32个系统调用详解
- fragment2中获取fragment1布局,找到控件设置f1里边的内容
- android 管理应用的内存
- git命令
- 阿里云服务器Tomcat搭建以及域名绑定