hdu 1069 Monkey and Banana dp
2011-10-27 09:09
489 查看
题意:给你n种个长方体,告诉你每种长方体的长,宽,高,并且每种长方体个数不限
问:把它们堆起来的最大高度
限制条件:上面一个长方体a的底面积,必须比它下面一个长方体b的底面积大,而且,a的底面的长宽也要大于b的底面的长宽
所以,b的底面积如果比a的底面积小,b也不一定能放在a上面
View Code
问:把它们堆起来的最大高度
限制条件:上面一个长方体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; }
相关文章推荐
- C - Monkey and Banana HDU - 1069——基础dp
- hdu 1069 Monkey and Banana(简单dp)
- HDU 1069 Monkey and Banana——DP
- HDU-1069-DP-Monkey and Banana
- HDU 1069 Monkey and Banana(dp)
- HDU 1069 Monkey and Banana (DP)
- HDU 1069 Monkey and Banana(dp)
- hdu1069 Monkey and Banana(dp+贪心)
- hdu 1069 Monkey and Banana(dp求最大高度)
- HDU - 1069 Monkey and Banana(dp)
- HDU 1069 Monkey and Banana 基础DP
- 【HDU】1069 - Monkey and Banana(dp)
- hdu 1069 Monkey and Banana (DP)
- hdu 1069 Monkey and Banana -->dp
- hdu 1069 Monkey and Banana(dp 最长上升子序列)
- 【hdu 1069】Monkey and Banana(dp)
- HDU 1069 Monkey and Banana (经典dp)详解及易错点分析
- Hdu 1069 Monkey and Banana -- DP
- HDU 1069 Monkey and Banana(dp)
- HDU 1069 Monkey and Banana DP LIS