HDU 1069
来源:互联网 发布:搜索引擎优化外包 编辑:程序博客网 时间:2024/06/05 09:31
#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,这个是需要考虑多个因素的最长递减子序列,题目比较花哨,容易让人心生畏惧,仍需要好好努力学习啊
0 0
- hdu 1069
- HDU 1069
- HDU 1069
- HDU 1069
- HDU 1069
- hdu 1069
- hdu 1069
- hdu 1069
- HDU 1069
- hdu 1069
- hdu 1069
- hdu 1069
- hdu 1069
- HDU 1069
- hdu 1069
- hdu-1069
- hdu 1069
- HDU 1069
- VS2013常用快捷键:
- 排序-堆排序
- Android加载大图片方法-避免oom错误
- 记事本
- Leetcode no. 335
- HDU 1069
- Depth First Search (DFS)入门
- 算法: 快速算法
- CentOS7开启和关闭自动下载更新
- <<unix/linux programming>>学习标记整理
- Android大牛博客地址集合
- react-native 手势应答系统
- C语言中的static作用
- 分析型数据库 ADS 报错 Query misses join index