#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct rect
{
int x;
int y;
int z;
}r[100];
int bubblesort(struct rect* r,int n)
{
int i,j,t=n;
struct rect temp;
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
if(r[j].x<r[j+1].x)
{
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
}
if(r[j].x==r[j+1].x && r[j].y<r[j+1].y)
{
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
}
if(r[j].x==r[j+1].x && r[j].y==r[j+1].y && r[j].z<r[j+1].z)
{
temp=r[j];
r[j]=r[j+1];
r[j+1]=temp;
}
}
}
for(i=1;i<t;i++)
{
if(r[i].x==r[i-1].x && r[i].y==r[i-1].y)
{
for(j=i;j<t;j++)
{
r[j]=r[j+1];
}
t--;
i--;
}
}
return t;
}
int main()
{
int n,i,j,k,t,a,b,c,f[100],m,cas=0;
while(scanf("%d",&n),n)
{
j=-1;
cas++;
memset(r,0,sizeof(r));
for(i=0;i<n;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(a==b&&b==c)
{
r[++j].x=a;
r[j].y=b;
r[j].z=c;
}
else if(a==b || b==c || a==c)
{
//调整为b==c
if(a==b)
{
t=a;
a=c;
c=t;
}
if(a==c)
{
t=a;
a=b;
b=t;
}
//
r[++j].x=b;
r[j].y=c;
r[j].z=a;
//将较大的放在前面
if(a<b)
{
t=a;
a=b;
b=t;
}
r[++j].x=a;
r[j].y=b;
r[j].z=c;
}
else
{
if(a<b)
{
t=a;
a=b;
b=t;
}
if(b<c)
{
t=b;
b=c;
c=t;
}
if(a<b)
{
t=a;
a=b;
b=t;
}
r[++j].x=a;
r[j].y=b;
r[j].z=c;
r[++j].x=b;
r[j].y=c;
r[j].z=a;
r[++j].x=a;
r[j].y=c;
r[j].z=b;
}
}
//依据x值进行排序
k=j+1;
n=bubblesort(r,k);
// printf("%d\n",n);
// for(i=0;i<n;i++)
// printf("%d %d %d\n",r[i].x,r[i].y,r[i].z);
//以上实现了输入的排序且考虑了翻转,其中结构体中的x必然大于y
k=n;
f[k]=-1;
for(i=0;i<k;i++)
f[i]=r[i].z;
for(i=k-1;i>=0;i--)
{
m=0;
for(j=i+1;j<k;j++)
{
if(r[j].x<r[i].x && r[j].y<r[i].y)
{
if(m<f[j])
m=f[j];
}
}
f[i]+=m;
}
m=0;
for(i=0;i<k;i++)
{
if(f[i]>m)
m=f[i];
}
printf("Case %d: maximum height = %d\n",cas,m);
}
return 0;
}
HDU 1069
最新推荐文章于 2024-07-29 10:00:00 发布
151

被折叠的 条评论
为什么被折叠?



