hdu 1069 Monkey and Banana dp

题意:给你n种个长方体,告诉你每种长方体的长,宽,高,并且每种长方体个数不限

问:把它们堆起来的最大高度

限制条件:上面一个长方体a的底面积,必须比它下面一个长方体b的底面积大,而且,a的底面的长宽也要大于b的底面的长宽

所以,b的底面积如果比a的底面积小,b也不一定能放在a上面

View Code
#include <iostream>
#include <algorithm>

using namespace std;

struct node{
int a,b,h,area;
}ar[100];

int cmp(node a,node b)
{
return a.area>b.area;
}

int main()
{
int i,j,k=1,n,m,ans,a,b,c,dp[100];
while (cin>>n&&n)
{
m=0;
for (i=0;i<100;i++)dp[i]=0;
for (i=0;i<n;i++)
{
cin>>a>>b>>c;
ar[m].area=a*b,ar[m].a=a,ar[m].b=b,ar[m++].h=c;
ar[m].area=b*c,ar[m].a=b,ar[m].b=c,ar[m++].h=a;
ar[m].area=a*c,ar[m].a=a,ar[m].b=c,ar[m++].h=b;
}
sort(ar,ar+m,cmp);
dp[0]=ar[0].h;
ans=0;
for (i=1;i<m;i++)
{
dp[i]=ar[i].h;
for (j=0;j<i;j++)
{
if(ar[i].a<ar[j].a&&ar[i].b<ar[j].b||ar[i].a<ar[j].b&&ar[i].b<ar[j].a)
{
dp[i]=max(dp[i],dp[j]+ar[i].h);
}
}
if(dp[i]>ans)ans=dp[i];
}
cout<<"Case "<<k++<<": maximum height = "<<ans<<endl;
}
return 0;
}



posted @ 2011-10-27 09:09  104_gogo  阅读(855)  评论(0编辑  收藏  举报