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;
}

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号