UVa 437
综合素质评选,就是耻辱
知耻而后勇。
更高处见,和这些恶心人和事再也不见
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
using namespace std;
const int maxn= 35;
const int sd= 3;
int tps[maxn][sd];
int dp[maxn][sd];
int n;
void Getv(int *v, int id, int dm)
{
int j= 0;
for (int i= 0; i< sd; ++i){
if (i!= dm){
v[j++]= tps[id][i];
}
}
}
int Dp(int id, int dm)
{
if (dp[id][dm]> 0){
return dp[id][dm];
}
int a= 0;
int v[2], vv[2];
Getv(v, id, dm);
for (int i= 0; i< n; ++i){
for (int j= 0; j< sd; ++j){
Getv(vv, i, j);
if (v[0]> vv[0] && v[1]> vv[1]){
a= max(a, Dp(i, j));
}
}
}
dp[id][dm]= a+tps[id][dm];
return dp[id][dm];
}
int main(void)
{
int ans, kase= 0;
while ((EOF!= scanf("%d", &n)) && 0!=n){
ans= -1;
memset(dp, -1, sizeof(dp));
for (int i= 0; i< n; ++i){
scanf("%d %d %d", tps[i], tps[i]+1, tps[i]+2);
sort(tps[i], tps[i]+3);
}
for (int i= 0; i< n; ++i){
for (int d= 0; d< sd; ++d){
ans= max(ans, Dp(i, d));
}
}
printf("Case %d: maximum height = %d\n", ++kase, ans);
}
return 0;
}