把某个立方体的六种每个都算一种即可
//============================================================================
// Name : 437.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef struct{
int x,y;
int h;
}block;
block cube[300];
int num, a, b, c, Max, n;
int d[300];
bool cmp(block a, block b){
if(a.x < b.x){
return true;
}
else if(a.x == b.x){
if(a.y < b.y){
return true;
}
else if(a.y == b.y){
if(a.h > b.h){
return true;
}
else{
return false;
}
}
else{
return false;
}
}
else{
return false;
}
}
int main() {
freopen("a.txt", "r", stdin);
int T = 0;
while(scanf("%d", &n)&&n){
T++;
num = 0;
for(int i = 0;i < n;i++){
scanf("%d%d%d", &a, &b, &c);
cube[num].x = a;
cube[num].y = b;
cube[num].h = c;
num += 1;
cube[num].x = a;
cube[num].y = c;
cube[num].h = b;
num += 1;
cube[num].x = b;
cube[num].y = a;
cube[num].h = c;
num += 1;
cube[num].x = b;
cube[num].y = c;
cube[num].h = a;
num += 1;
cube[num].x = c;
cube[num].y = a;
cube[num].h = b;
num += 1;
cube[num].x = c;
cube[num].y = b;
cube[num].h = a;
num += 1;
}
sort(cube, cube+num, cmp);
Max = 0;
for(int i = 0;i < num;i++){
d[i] = cube[i].h;
if(Max < d[i]){
Max = d[i];
}
}
// for(int i = 0;i < num;i++){
// printf("%d %d %d\n", cube[i].x, cube[i].y, cube[i].h);
// //printf("%d\n", d[i]);
// }
// printf("%d\n", Max);
for(int i = 0;i < num;i++){
for(int j = 0;j <= i;j++){
if(cube[i].x > cube[j].x&&cube[i].y > cube[j].y){
if(d[i] < d[j]+cube[i].h){
d[i] = d[j]+cube[i].h;
if(Max < d[i]){
Max = d[i];
}
}
}
}
}
printf("Case %d: maximum height = ", T);
printf("%d\n", Max);
}
return 0;
}