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
", ++kase, ans);
	}

	return 0;
}
原文地址:https://www.cnblogs.com/Idi0t-N3/p/13752525.html