输出里面的maximum 写成了maxinum WA了N次 看了N久才发现 !!!!!!!!!!!!!!惨烈!!!!!!!!!!!!!!!!!!!!!!!下次注意!!!!!!!!!!!!!!!!
先讲1个格子拆成3种格子
然后按x对格子进行递减排序
dp[j]记录取第j个格子的情况下 所能堆叠的最大高度
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int x;
int y;
int z;
}dot;
int cmp(const void*a,const void *b)
{
return (*(dot *)b).x-(*(dot *)a).x;
}
int main()
{
dot block[205];
int n,i,j,max,t,q,w,e,num=0;
int dp[205];
while(~scanf("%d",&n),n)
{
num++;
memset(dp,0,sizeof(dp));
block[0].x=block[0].y=block[0].z=0;
for(i=1;i<=n;i++)
{
scanf("%d%d%d",&q,&w,&e);
if(q<w)
{
t=q;
q=w;
w=t;
}
if(w<e)
{
t=w;
w=e;
e=t;
}
if(q<w)
{
t=q;
q=w;
w=t;
}
block[i*3-2].x=q;block[i*3-2].y=w;block[i*3-2].z=e;
block[i*3-1].x=q;block[i*3-1].y=e;block[i*3-1].z=w;
block[i*3].x=w;block[i*3].y=e;block[i*3].z=q;
}
n=n*3;
qsort(block,n+1,sizeof(dot),cmp);
for(i=0;i<n;i++)
{
dp[i]=block[i].z;
max=0;
for(j=0;j<i;j++)
{
if(block[i].y<block[j].y&&dp[j]>max&&block[i].x!=block[j].x)
max=dp[j];
}
dp[i]+=max;
}
max=0;
for(i=0;i<n;i++)
if(dp[i]>max) max=dp[i];
printf("Case %d: maximum height = %d\n",num,max);
}
return 0;
}