您的位置:首页 > 其它

hdu 1069 Monkey and Banana (DP)

2012-10-15 13:08 489 查看
点击打开链接

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: