UVa 437
来源:互联网 发布:网络电视能连手机吗 编辑:程序博客网 时间:2024/06/16 16:14
/*#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=200;int n,m,x,y,z;int dp[maxn];//表示当以第i个木块为底层的时候的最高高度为多少?struct nm{ int x,y,z; void f(int a,int b,int c) { x=a;y=b;z=c; }}aa[maxn];bool cmp(nm a,nm b){ if(a.x*a.y<b.x*b.y) return 1; return 0;}int main(){ int kase=1; while(scanf("%d",&n)!=EOF) { m=0; if(n==0) break; for(int i=0;i<n;i++) { scanf("%d%d%d",&x,&y,&z); aa[ m++].f(x,y,z); //将6种立方体均保存起来 aa[ m++].f(x,z,y); aa[ m++].f(y,z,x); aa[ m++].f(y,x,z); aa[ m++].f(z,x,y); aa[ m++].f(z,y,x); } sort(aa,aa+m,cmp); int t=0; for(int i=0;i<m;i++) { dp[i]=aa[i].z; for(int j=0;j<i;j++) { if(aa[i].x>aa[j].x&&aa[i].y>aa[j].y) dp[i]=max(dp[i],dp[j]+aa[i].z); } if(dp[i]>t) t=dp[i]; } printf("Case %d: maximum height = %d\n",kase++,t); } return 0;}*/#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<queue>#include<cmath>#include<cstring>using namespace std;typedef long long int64;const int INF = 0x3f3f3f3f;const int MAXN = 230;int n;bool g[MAXN][MAXN];int f[MAXN];struct Node{ int x, y, h;}A[MAXN];bool check(int i, int j) { return A[i].x<A[j].x && A[i].y<A[j].y || A[i].x<A[j].y && A[i].y<A[j].x;}int dfs(int u) { if(f[u] != -1) return f[u]; f[u] = A[u].h; for(int i = 0; i < n; ++i) if(g[u][i]){ f[u] = max(f[u], dfs(i)+A[u].h); } return f[u];}int main(){ int cas = 1; while (~scanf("%d", &n) && n) { for(int i = 0; i < n; ++i) { scanf("%d%d%d", &A[i].x, &A[i].y, &A[i].h); A[n+i].x=A[i].x; A[n+i].y=A[i].h; A[n+i].h=A[i].y; A[2*n+i].x=A[i].y; A[2*n+i].y=A[i].h; A[2*n+i].h=A[i].x; } n *= 3; memset(g, 0, sizeof(g)); for(int i = 0; i < n; ++i) for(int j = i + 1; j < n; ++j) { g[i][j] = check(i, j); g[j][i] = check(j, i); } int ans = 0; memset(f, -1, sizeof(f)); for(int i = 0; i < n; ++i) { ans = max(ans, dfs(i)); } printf("Case %d: maximum height = %d\n", cas++, ans); } return 0;}该题的做法还是很不错的,非常的经典,是DAG的问题,当然也可以按照第一个做法的那样,采用最长上升自序列的做法来解决。
0 0
- uva-1025、uva-437、uva-1347、uva-116、uva-12563
- UVa 437
- UVA 437
- uva 437
- UVa 437
- uva 437 hdu 1069
- uva 437 动态规划
- uva 437 dp
- UVA 437 巴比伦塔
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- Android Studio官方文档之如何创建一个Android第三方库
- 【工具】ubantu下装sublime的文章
- c++ visual studio 2013连接mysql
- mysql 定时器实例
- Leetcode Contains Duplicate
- UVa 437
- nodejs 设计思想杂记 三 observer模式
- 知道一个IP地址,如何计算出它的子网掩码啊?
- 索引的访问-SQL Server
- tomcat源码解析(二)--web.xml文件的解析
- 使用p6spy 2监控及打印Spring 4 JdbcTemplate生成的SQL语句
- HTML学习笔记(上)
- Android Studio配置greenDao框架详解--说说那些坑
- Android开发中内存泄露与优化