www.pudn.com > zhejiang_university_acm_onlinejudge_code.rar > zp1093_p.cpp


//--------------------------------------------------------------------------- 
 
#include  
#pragma hdrstop 
 
//--------------------------------------------------------------------------- 
 
#pragma argsused 
#include  
 
int x[100]; 
int y[100]; 
int z[100]; 
int a[100]; 
int temp; 
 
void Swap(int &a,int &b) 
{ 
   temp = a; 
   a = b; 
   b = temp; 
} 
 
int n; 
 
int main() 
{ 
   int i,j; 
   int test = 1; 
   while(scanf("%d\n",&n)) 
   { 
      if(n == 0) 
         break; 
      for(i = 0; i < n; ++i) 
      { 
         scanf("%d %d %d\n",&x[i],&y[i],&z[i]); 
         a[i] = 0; 
         x[n+i] = y[i]; 
         y[n+i] = z[i]; 
         z[n+i] = x[i]; 
         a[n+i] = 0; 
         x[2*n+i] = z[i]; 
         y[2*n+i] = x[i]; 
         z[2*n+i] = y[i]; 
         a[2*n+i] = 0; 
      } 
      for(i = 0; i < 3 * n; ++i) 
         if(x[i] > y[i]) 
            Swap(x[i],y[i]); 
      for(i = 0; i < 3 * n; ++i) 
         for(j = i + 1; j < 3 * n; ++j) 
            if(x[i] > x[j] || (x[i] == x[j] && y[i] > y[j])) 
            { 
               Swap(x[i],x[j]); Swap(y[i],y[j]); Swap(z[i],z[j]); 
            } 
      for(i = 0; i < 3 * n; ++i) 
         for(j = i + 1; j < 3 * n; ++j) 
         { 
            if(x[i] < x[j] && y[i] < y[j]) 
            { 
               if(a[j] == 0) 
                  a[j] = a[i] + z[i]; 
               else if(a[j] < a[i] + z[i]) 
                  a[j] = a[i] + z[i]; 
            } 
         } 
      int max = 0; 
      for(i = 0; i < 3 * n; ++i) 
         if(max < z[i] + a[i]) 
            max = z[i] + a[i]; 
      printf("Case %d: maximum height = %d\n",test,max); 
      ++test; 
   } 
   return 1; 
} 
 
//---------------------------------------------------------------------------