UVA 437 The Tower of Babylon
2014-07-30 11:39
369 查看
dp
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using namespace std; struct node { int x,y,h; void init (int nx,int ny,int nh){ x=nx;y=ny;h=nh; } }d[100]; int dp[100]; int g[100][100]; bool cmp (node x,node y){ if (x.x<y.x) return true ; else if (x.x==y.x){ if (x.y<y.y) return true ; else if (x.y==y.y){ if (x.h<y.h) return true ; } } return false ; } int main (){ int n; int kase=0; while (cin>>n&&n){ for (int i=0;i<n;i++){ int x[5]; cin>>x[0]>>x[1]>>x[2]; sort (x,x+3); d[i*3].init (x[0],x[1],x[2]); d[i*3+1].init (x[0],x[2],x[1]); d[i*3+2].init (x[1],x[2],x[0]); } n*=3; sort (d,d+n,cmp); memset (g,0,sizeof g); for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ if (d[i].x<d[j].x&&d[i].y<d[j].y) g[j][i]=1; } dp[i]=d[i].h;//cout<<dp[i]<<endl; } for (int i=0;i<n;i++){ for (int j=0;j<n;j++){ if (g[i][j]) dp[i]=max (dp[i],dp[j]+d[i].h);//cout<<i<<j<<" "<<dp[i]<<endl; } } int ans=0; for (int i=0;i<n;i++) ans=max (ans,dp[i]); cout<<"Case "<<++kase<<": maximum height = "<<ans<<endl; } return 0; }
相关文章推荐
- uva 437 The Tower of Babylon
- UVa 437 - The Tower of Babylon
- UVA 437 The Tower of Babylon
- uva 437 The Tower of Babylon(DAG的DP)
- uva 437 - The Tower of Babylon(DP)
- UVA 437 - The Tower of Babylon 动规
- uva437 - The Tower of Babylon(动规,记忆化搜索)
- uva_437_The Tower of Babylon
- UVa 437 - The Tower of Babylon
- UVa 437 The Tower of Babylon (DP&DAG)
- 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 LIS
- UVA 437 The Tower of Babylon
- UVA 437 - The Tower of Babylon
- UVA 437 The Tower of Babylon (dp + DAG最长序列)
- UVa 437 - The Tower of Babylon
- UVa 437 The Tower of Babylon