#include<cstdio>
#include<cstring>
#include<algorithm>
#define k1(x) ((x+1)%3)
#define k2(x) ((x+2)%3)
using namespace std;
int dp[36][4],d[36][4],n;
int dfs(int lo,int k){
// printf("%d %d\n",lo,k);
if(dp[lo][k]) return dp[lo][k];
dp[lo][k]=d[lo][k];
int t=dp[lo][k];
for(int i=0;i<n;i++){
for(int j=0;j<3;j++){
if( (d[lo][k1(k)] > d[i][k1(j)] && d[lo][k2(k)] > d[i][k2(j)])|| (d[lo][k1(k)] > d[i][k2(j)] && d[lo][k2(k)] > d[i][k1(j)]) )
dp[lo][k]=max(dp[lo][k],t+dfs(i,j));
}
}
return dp[lo][k];
}
int main(){
int t=1;
while(scanf("%d",&n) == 1 && n){
memset(dp,0,sizeof(dp));
for(int i=0;i<n;i++){
scanf("%d%d%d",&d[i][0],&d[i][1],&d[i][2]);
}
int res=0;
for(int i=0;i<n;i++){
for(int j=0;j<3;j++)
res=max(res,dfs(i,j));
}
printf("Case %d: maximum height = %d\n",t++,res);
}
}
uva437 DAG最长路
最新推荐文章于 2020-11-30 19:30:55 发布