1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 30+5; 5 int n,blocks[maxn][3],d[maxn][3]; 6 7 void get_dimensions(int* v,int b,int dim){ 8 int idx=0; 9 for(int i=0; i<3; i++) if(i!=dim) 10 v[idx++] = blocks[b][i]; 11 } 12 13 14 int dp(int i,int j){ 15 if(d[i][j]>0) return d[i][j]; 16 d[i][j] = 0; 17 int v[2],v2[2]; 18 get_dimensions(v,i,j); 19 for(int a=0; a<n; a++){ 20 for(int b=0; b<3; b++){ 21 get_dimensions(v2,a,b); 22 if(v2[0]<v[0] && v2[1]<v[1]) d[i][j] = max(d[i][j],dp(a,b)); 23 } 24 } 25 d[i][j] += blocks[i][j]; 26 return d[i][j]; 27 } 28 29 int main(){ 30 int kase = 0; 31 while(scanf("%d",&n)==1 && n){ 32 for(int i=0; i<n; i++){ 33 for(int j=0; j<3; j++) 34 scanf("%d",&blocks[i][j]); 35 sort(blocks[i],blocks[i]+3); 36 } 37 memset(d,0,sizeof(d)); 38 int ans = 0; 39 for(int i=0; i<n; i++) 40 for(int j=0; j<3; j++) 41 ans = max(ans,dp(i,j)); 42 printf("Case %d: maximum height = %d ",++kase,ans); 43 } 44 }