zoj 1093

来源:互联网 发布:java后端主要做什么 编辑:程序博客网 时间:2024/06/06 01:37
#include<iostream>
using namespace std;
int n,cs=1,k;
int num[201][3];
int f[201];
int find(int x){
    if(f[x]!=-1) return f[x];
    int mins=0,i,h;
    for(i=1;i<=k;i++){
        if(num[x][0]>num[i][0] && num[x][1]>num[i][1]){
             h=num[i][2]+find(i);
             if(h>mins) mins=h;                      
        }                 
    }
    f[x]=mins;
    return mins;
}
int main()
{
    int i,x,y,z;
     while(true){
          scanf("%d",&n);
          if(n==0) break;
          for(i=0,k=1;i<n;i++){
                scanf("%d %d %d",&x,&y,&z);
                k++;  num[k][0]=x;num[k][1]=y;num[k][2]=z; 
                k++;  num[k][0]=x;num[k][1]=z;num[k][2]=y;
                k++;  num[k][0]=y;num[k][1]=x;num[k][2]=z;
                k++;  num[k][0]=y;num[k][1]=z;num[k][2]=x;
                k++;  num[k][0]=z;num[k][1]=y;num[k][2]=x;
                k++;  num[k][0]=z;num[k][1]=x;num[k][2]=y;           
          }
          for(i=0;i<=k;i++) f[i]=-1;
          num[0][0]=num[0][1]=100000;
          printf("Case %d: maximum height = %d/n",cs++,find(0));
     }
     system("pause");
     return 0;
}