hdu 1069 Monkey and Banana (DP)

点击打开链接

1,输入箱子的种类数

2,输入各个箱子的长宽高;

求各个箱子放起来达到的最大高度,要求,下面的箱子的长和宽都比上面的要大!!

#include"stdio.h"
#include"stdlib.h"
struct A
{
	int x;
	int y;
	int h;
}each[100];
int cmp(const void*a,const void*b) 
{ 
	struct A *c,*d;
	c=(struct A*)a;
	d=(struct A*)b;
    if(c->x!=d->x) 
        return d->x-c->x; 
    else 
        return d->y-c->y; 
}
int main()
{
	int n;
	int i,l;
	int k;
	int x,y,z;
	int dp[100];
	int max;
	int Case=1;
	while(scanf("%d",&n),n)
	{
		k=0;
		for(i=0;i<n;i++)
		{
			scanf("%d%d%d",&x,&y,&z);
			each[k].x=x>y?x:y;
			each[k].y=x>y?y:x;
			each[k].h=z;
			k++;
			each[k].x=x>z?x:z;
			each[k].y=x>z?z:x;
			each[k].h=y;
			k++;
			each[k].x=z>y?z:y;
			each[k].y=z>y?y:z;
			each[k].h=x;
			k++;
		}
		qsort(each,k,sizeof(each[0]),cmp);
		
		dp[0]=each[0].h;
		for(i=1;i<k;i++)
		{
			max=0;
			for(l=i-1;l>=0;l--) 
			{
				if((each[l].y>each[i].y&&each[l].x>each[i].x)||(each[l].y>each[i].x&&each[l].x>each[i].y))
					
				{
					if(dp[l]>max)
						max=dp[l];
				}
			}
			
			dp[i]=max+each[i].h;
		}
		max=0;
		for(i=0;i<k;i++)
		{
			if(dp[i]>max)
				max=dp[i];
		}
		
		printf("Case %d: maximum height = %d\n",Case,max);
		Case++;
	}
	return 0;
}


posted on 2012-10-15 13:08  Slege  阅读(98)  评论(0编辑  收藏  举报

导航