这是一个动态规划题目,不是太难,只要理解动态规划思想就可以做出来。。。
#include<stdio.h>
#include<stdlib.h>struct node{
int x;
int y;
int z;
int s;
}S[100];
int high[100];
int cmp(const void *a,const void *b)
{
struct node *c=(struct node *)a;
struct node *d=(struct node *)b;
return c->s - d->s;
}
int main()
{
int i,n,j,max,k;
int a,b,c;
k=1;
while(scanf("%d",&n)!=EOF && n)
{
for(j=0;j<=n-1;j++){
scanf("%d%d%d",&a,&b,&c);
S[3*j].s=a*b; S[3*j].x=a; S[3*j].y=b; S[3*j].z=c;
S[3*j+1].s=b*c; S[3*j+1].x=b; S[3*j+1].y=c; S[3*j+1].z=a;
S[3*j+2].s=a*c; S[3*j+2].x=a; S[3*j+2].y=c; S[3*j+2].z=b;
}
n*=3;
qsort(S,n,sizeof(S[0]),cmp);
for (i=0;i<=n-1;i++)
{
high[i]=S[i].z; // 高度初始化
}
for (i=1;i<=n-1;i++)
{
max=0;
for (j=0;j<i;j++)
{
if ((S[i].x>S[j].x && S[i].y>S[j].y || S[i].x>S[j].y && S[i].y>S[j].x)&& max<high[j])
max=high[j];
}
high[i]+=max; // 当前高度
}
max=0;
for (i=0;i<=n-1;i++)
{
if (max<high[i])
max=high[i];
}
printf("Case %d: maximum height = %d\n",k++,max);
}
system("pause");
return 0;
}