[HDU-1069]Monkey and Banana

来源:互联网 发布:lufylegend.js 编辑:程序博客网 时间:2024/06/05 05:27



#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn = 30*6 + 20;struct Node {    int x, y, z;};Node S[maxn];int dp[maxn];bool cmp( Node a, Node b ) {    if( a.x<b.x ) { return 1; }    else if( a.x==b.x && a.y<b.y ) { return 1; }    else { return 0; }}int main() {    int n;    int cnt = 0;    while( cin >> n && n ) {        memset( dp, 0, sizeof(dp) );        for(int i=0; i<n; ++i) {            int a, b, c;            cin >> a >> b >> c;            S[i*6+1].x = a; S[i*6+1].y = b; S[i*6+1].z = c;            S[i*6+2].x = a; S[i*6+2].y = c; S[i*6+2].z = b;            S[i*6+3].x = b; S[i*6+3].y = a; S[i*6+3].z = c;            S[i*6+4].x = b; S[i*6+4].y = c; S[i*6+4].z = a;            S[i*6+5].x = c; S[i*6+5].y = a; S[i*6+5].z = b;            S[i*6+6].x = c; S[i*6+6].y = b; S[i*6+6].z = a;        }        int ans = 0;        sort( S, S+6*n, cmp );        for(int i=1; i<=n*6; ++i) {            for(int j=0; j<i; ++j) {                if( S[i].x>S[j].x && S[i].y>S[j].y )                    dp[i] = max( dp[i], dp[j]+S[i].z );            }            ans = max( ans, dp[i] );        }        printf("Case %d: maximum height = %d\n", ++cnt, ans);    }    return 0;}