动态规划类题目
#include<stdio.h>
#include<stdlib.h>
typedef struct aa{
int x,y,z;
}S;
S d[100];
int cmp(const void *_p,const void *_q)
{
S *p = (S *)_p;
S *q = (S *)_q;
if( p->x == q->x)
return p->y - q->y;
return p->x - q->x;
}
int main()
{
int N,i,j,a,b,c,a1,b1,c1,cnt = 1,max;
while(scanf("%d",&N),N)
{
for(i = 1; i <= N*3; i += 3)
{
scanf("%d%d%d",&a,&b,&c);
a1 = a; if(a1 > b) a1 = b; if(a1 > c) a1 = c;
c1 = a; if(c1 < b) c1 = b; if(c1 < c) c1 = c;
b1 = a + b + c - a1 - c1;
d[i].x = c1; d[i].y = b1; d[i].z = a1;
d[i+1].x = b1; d[i+1].y = a1; d[i+1].z = c1;
d[i+2].x = c1; d[i+2].y = a1; d[i+2].z = b1;
}
d[0].x = d[0].y = d[0].z = 0;
qsort( d, N*3 + 1, sizeof(d[0]),cmp);
for(i = 0; i <= N*3; i++)
{
max = 0;
for(j = 0; j < i; j++)
{
if(d[i].x > d[j].x && d[i].y > d[j].y && d[j].z > max)
max = d[j].z;
}
d[i].z += max;
}
max = 0;
for(i = 0; i <= N*3; i++)
{
if(d[i].z > max)
max = d[i].z;
}
printf("Case %d: maximum height = %d\n",cnt,max);
cnt++;
}
return 0;
}