UVa 437 - The Tower of Babylon
2013-06-15 18:43
429 查看
#include <cstring> #include <cstdio> #include <algorithm> #include <cmath> using namespace std; const int MAXN = 95; int A[MAXN][3]; int n; int m[MAXN][MAXN]; int d[MAXN]; int dp(int u) { int& cur = d[u]; if(cur > 0) return cur; cur = A[u][2]; for(int v=0; v<MAXN; v++) if(m[u][v]){ int val = dp(v); if(val+A[u][2] > cur) { cur = val + A[u][2]; } } return cur; } int main(){ #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); #endif int T=0; while(scanf("%d", &n)==1 && n!=0) { for(int i=0; i<n*3; i+=3) { scanf("%d%d%d", &A[i][0], &A[i][1], &A[i][2]); sort(A[i], A[i]+3); memcpy(A[i+1], A[i], sizeof(A[i])); swap(A[i+1][2], A[i+1][1]); memcpy(A[i+2], A[i+1], sizeof(A[i])); swap(A[i+2][2], A[i+2][0]); } n *= 3; memset(m, 0, sizeof(m)); for(int i=0; i<n-1; i++) { for(int j=1; j<n; j++) { if(A[i][0] > A[j][0] && A[i][1]>A[j][1]) { m[i][j] = 1; } else if(A[i][0]<A[j][0] && A[i][1]<A[j][1]) { m[j][i] = 1; } } } memset(d, 0, sizeof(d)); int max_val = 0; for(int i=0; i<n; i++) { int val = dp(i); if(val > max_val) max_val = val; } printf("Case %d: maximum height = %d\n", ++T, max_val); } return 0; }
相关文章推荐
- Uva 437-The Tower of Babylon(DP)
- UVA437 - The Tower of Babylon
- uva 437 The Tower of Babylon
- UVa 437 (变形的LIS) The Tower of Babylon
- UVa 437 The Tower of Babylon
- UVA 437 The Tower of Babylon
- UVa 437. The Tower of Babylon
- UVA 437 The Tower of Babylon(最长上升子序列)
- uva 437 The Tower of Babylon
- 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)
- UVA437- - The Tower of Babylon
- UVa 437 - The Tower of Babylon
- uva 437 The Tower of Babylon (DAG)
- The Tower of Babylon UVA - 437
- UVA_437_The Tower of Babylon
- UVA 437 The Tower of Babylon
- UVA 437 - The Tower of Babylon (DAG)
- UVa 437 The Tower of Babylon(经典动态规划)
- UVA 437 The Tower of Babylon (dp + DAG最长序列)
- 【UVA 437】The Tower of Babylon(记忆化搜索写法)