Hdu 1069 Monkey and Banana -- DP
2013-08-27 17:33
393 查看
/* 题意:给你n个箱子,有长宽高,箱子的个数不限,让你把它们摞起来以得到最高的高度。摞起来的规则是:上面箱子的长宽必须严格小于下面箱子的对应长宽。 箱子可以翻转。 分析:按 立起来是长、宽、高将一个箱子看做是三个箱子。对长宽进行排序,再从最大的搜到最小的,每次更新得到的最大高度,即可得到结果。 也可以用弗洛伊德求最长路的思想来做。 */ #include<stdio.h> #include<algorithm> using namespace std; struct block{ int x,y,z; }a[100]; bool cmp(block a,block b) { if(a.x=b.x)return a.y>b.y; return a.x>b.x; } int num; void div(int x,int y ,int z) { a[num].x = x>y?x:y; a[num].y = x+y-a[num].x; a[num].z = z; num++; } int main() { int n;int x,y,z,ans,c; c = 0; while (scanf("%d",&n)!=EOF) { if(n==0)break; int h[105] = {0}; num = 0;ans = 0; for (int i = 0; i < n; i++) { scanf("%d %d %d",&x,&y,&z); div(x,y,z); div(x,z,y); div(y,z,x); } sort(a,a+num,cmp); for (int i = 0; i < num; i++)//h[i]表示以a[i].x,a[i].y为底所能得到的最大高度。 { h[i] = 0; for (int j = i-1; j >= 0; j--)//每次都往前面去查。 { if(a[i].x<a[j].x && a[i].y<a[j].y && h[j]>h[i]) h[i] = h[j]; } h[i] += a[i].z; if(h[i] > ans) ans = h[i]; } printf("Case %d: maximum height = %d\n",++c,ans); } return 0; }
相关文章推荐
- DP-HDU-1069-Monkey and Banana
- HDU 1069 Monkey and Banana(DP)
- C - Monkey and Banana 【hdu 1069 dp】
- HDU1069 Monkey and Banana ——dp
- HDU 1069 Monkey and Banana DP LIS变形题
- zoj 1093 || hdu 1069 Monkey and Banana( Easy DP )
- HDU-1069 Monkey and Banana ( DP )
- Monkey and Banana HDU - 1069------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)