HDU 1069

#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;
}

你可能感兴趣的:(c,struct,ini)