//每种坐标有三种高,每种高有两种情况,最多只有180种情况。先对x排序,x相等时对y排序,然后按照提议dp处理
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct elem
{
int x;
int y;
int z;
}dp[200];
bool cmp(elem a,elem b)
{
if(a.x<b.x) return 1;
else if(a.x==b.x&&a.y<b.y) return 1;
else return 0;
}
int main()
{
int xx,yy,zz;
int n;
int l=0;
int cas=0;
while(~scanf("%d",&n)&&n)
{
cas++;
l=0;
int i;
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&xx,&yy,&zz);
dp[l].x=xx;
dp[l].y=yy;
dp[l].z=zz;
l++;
dp[l].x=yy;
dp[l].y=xx;
dp[l].z=zz;
l++;
dp[l].x=xx;
dp[l].y=zz;
dp[l].z=yy;
l++;
dp[l].x=zz;
dp[l].y=xx;
dp[l].z=yy;
l++;
dp[l].x=zz;
dp[l].y=yy;
dp[l].z=xx;
l++;
dp[l].x=yy;
dp[l].y=zz;
dp[l].z=xx;
}
sort(dp,dp+l,cmp);
int j;
for(i=1;i<l;i++)
{
int tmp=0;
for(j=0;j<i;j++)
{
if((dp[j].x<dp[i].x&&dp[j].y<dp[i].y)&&tmp<dp[j].z){
tmp=dp[j].z;
}
}
dp[i].z+=tmp;
}
int maxn=0;
for(i=0;i<l;i++)
if(maxn<dp[i].z) maxn=dp[i].z;
printf("Case %d: maximum height = %d\n",cas,maxn);
}
return 0;
}
hdu 1069 动态规划 经典题
最新推荐文章于 2019-11-09 11:32:08 发布