博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVa 437 - The Tower of Babylon
阅读量:5340 次
发布时间:2019-06-15

本文共 1587 字,大约阅读时间需要 5 分钟。

和之前的 Stacking Boxes 很像,但是这里求的是最大高度,并且盒子成了立体状,因此对每个盒子有三种不同的高度,分别为x, y, z,相当于增加两个盒子;

记忆化搜索。

1 # include 
2 # include
3 4 typedef struct {
5 int x; 6 int y; 7 int h; 8 }block; 9 10 int n; 11 int f[91]; 12 block b[91]; 13 14 int cmp(const void *x, const void *y) 15 {
16 return (*(int *)x > *(int *)y ? 1:-1); 17 } 18 19 int dp(int i); 20 21 int main() 22 {
23 int i, cnt, maxH, tmp, t[3]; 24 25 cnt = 0; 26 while (1) 27 {
28 ++cnt; 29 scanf("%d", &n); 30 if ( !n ) break; 31 n *= 3; 32 for ( i = 1; i <= n; ++i) 33 {
34 scanf("%d%d%d", &t[0], &t[1], &t[2]); 35 qsort(t, 3, sizeof(int), cmp); 36 b[i].x = t[0]; b[i].y = t[1]; b[i].h = t[2]; ++i; 37 b[i].x = t[0]; b[i].y = t[2]; b[i].h = t[1]; ++i; 38 b[i].x = t[1]; b[i].y = t[2]; b[i].h = t[0]; 39 } 40 41 maxH = 0; 42 memset(f, 0, sizeof(f)); 43 for ( i = 1; i <= n; ++i) 44 if (maxH < (tmp = dp(i))) maxH = tmp; 45 46 printf("Case %d: maximum height = %d\n", cnt, maxH); 47 } 48 49 return 0; 50 } 51 52 int dp(int i) 53 {
54 int j, tmp; 55 56 if (f[i] > 0) return f[i]; 57 f[i] = b[i].h; 58 for ( j = 1; j <= n; ++j) 59 {
60 if (b[i].x>b[j].x && b[i].y>b[j].y && f[i] < (tmp = dp(j)+b[i].h)) 61 f[i] = tmp; 62 } 63 64 return f[i]; 65 }

转载于:https://www.cnblogs.com/JMDWQ/archive/2012/04/04/2431967.html

你可能感兴趣的文章
【Crash Course Psychology】2. Research & Experimentation笔记
查看>>
关于 linux 的 limit 的设置
查看>>
MTK笔记
查看>>
fat32转ntfs ,Win7系统提示对于目标文件系统文件过大解决教程
查看>>
shell cat 合并文件,合并数据库sql文件
查看>>
python全栈 计算机硬件管理 —— 硬件
查看>>
Delphi7编译的程序自动中Win32.Induc.a病毒的解决办法
查看>>
egret3D与2D混合开发,画布尺寸不一致的问题
查看>>
struts1和struts2的区别
查看>>
Redis常用命令
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
套接口和I/O通信
查看>>
阿里巴巴面试之利用两个int值实现读写锁
查看>>
浅谈性能测试
查看>>
Winform 菜单和工具栏控件
查看>>
CDH版本大数据集群下搭建的Hue详细启动步骤(图文详解)
查看>>
巧用Win+R
查看>>
浅析原生js模仿addclass和removeclass
查看>>
Python中的greenlet包实现并发编程的入门教程
查看>>
java中遍历属性字段及值(常见方法)
查看>>