HDU 1069
来源:互联网 发布:cocoa编程开发者手册 编辑:程序博客网 时间:2024/05/16 06:26
#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==cif(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必然大于yk=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;}