uva437巴比伦塔
巴比伦人有n种长方形方块,每种有无限个,第i种方块的三边边长是xi,yi,zi。对于每一个方块,你可以任意选择一面作为底,这样高就随着确定了。举个例子,同一种方块,可能其中一个是竖着放的,一个是侧着放的,一个是横着放的。
他们想要用堆方块的方式建尽可能高的塔。问题是,只有一个方块的底的两条边严格小于另一个方块的底的两条边,这个方块才能堆在另一个上面。这意味着,一个方块甚至不能堆在一个底的尺寸与它一样的方块的上面。
你的任务是编写一个程序,计算出这个塔可以建出的最高的高度。
【输入】
输入会包含至少一组数据,每组数据的第一行是一个整数n(n<=30),表示方块的种类数。 这组数据接下来的n行,每行有三个整数,表示xi,yi,zi。 输入数据会以0结束。
【输出】
对于每组数据,输出一行,其中包含组号(从1开始)和塔最高的高度。按以下格式: Case : maximum height = __
【输入样例】
1
10 20 30
2
6 8 10
5 5 5
7
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
5
31 41 59
26 53 58
97 93 23
84 62 64
33 83 27
0
【输出样例】
Case 1: maximum height = 40
Case 2: maximum height = 21
Case 3: maximum height = 28
Case 4: maximum height = 342
一道很有意思的DAG最长路
一个长方体需要建三个点表示三种情况,记搜一下就可以了
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e6+5; 4 const int INF=1e9+7; 5 int x[205],y[205],z[205]; 6 int n,cas,ans,dp[205]; 7 bool g[155][155]; 8 template <class t>void red(t &x) 9 { 10 x=0; 11 int w=1; 12 char ch=getchar(); 13 while(ch<'0'||ch>'9') 14 { 15 if(ch=='-') 16 w=-1; 17 ch=getchar(); 18 } 19 while(ch>='0'&&ch<='9') 20 { 21 x=(x<<3)+(x<<1)+ch-'0'; 22 ch=getchar(); 23 } 24 x*=w; 25 } 26 void input() 27 { 28 freopen("input.txt","r",stdin); 29 } 30 bool check(int a,int b) 31 { 32 if((x[a]<x[b]&&y[a]<y[b])||(x[a]<y[b]&&y[a]<x[b])) 33 return 1; 34 return 0; 35 } 36 int solve(int u) 37 { 38 if(dp[u]) 39 return dp[u]; 40 dp[u]=z[u]; 41 for(int i=0;i<n;++i) 42 if(g[u][i]) 43 dp[u]=max(dp[u],solve(i)+z[u]); 44 return dp[u]; 45 } 46 int main() 47 { 48 input(); 49 while(scanf("%d",&n)==1&&n) 50 { 51 ++cas; 52 ans=0; 53 //memset(g,0,sizeof(g)); 54 memset(dp,0,sizeof(dp)); 55 printf("Case %d: maximum height = ",cas); 56 for(int i=0;i<n;++i) 57 { 58 red(x[i]); 59 red(y[i]); 60 red(z[i]); 61 x[i+n]=y[i]; 62 y[i+n]=z[i]; 63 z[i+n]=x[i]; 64 x[i+n+n]=z[i]; 65 y[i+n+n]=x[i]; 66 z[i+n+n]=y[i]; 67 } 68 n*=3; 69 for(int i=0;i<n;++i) 70 for(int j=i+1;j<n;++j) 71 { 72 g[i][j]=check(i,j); 73 g[j][i]=check(j,i); 74 } 75 for(int i=0;i<n;++i) 76 ans=max(ans,solve(i)); 77 printf("%d\n",ans); 78 } 79 return 0; 80 }
View Code
转载于:https://www.cnblogs.com/Achensy/p/10777653.html
uva437巴比伦塔相关推荐
- UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)
整理的算法模板合集: ACM模板 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形. 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b) ...
- 第7章 为什么巴比伦塔会失败
第7章 为什么巴比伦塔会失败 标签:人月神话 现在整个大地都采用一种语言,只包括为数不多的单词.在一次从东方往西方迁徙的过程中,人们发现了苏美尔地区的一处平原,并在那里定居下来.接着他们奔走相告说:& ...
- 人月神话(三)画蛇添足、贯彻执行、为什么巴比伦塔会失败?
第5章 画蛇添足 如果将制定功能规格说明的责任从开发快速.成本低廉的产品的责任中分离出来,那么有什么样的准则和机制来约束结构师的创造性激情呢? Part 1 结构师的交互准则和机制 面对估算过高的难题 ...
- [UVa-437] Color Length
计算贡献:压缩空间优化时间 传送门:$>here<$ 题意 给出两个字符串$a$,$b$,将他们穿插起来(相对位置不变),要求最小化$\sum L(c)$,其中$L(c)$的定义时在穿插完 ...
- 【DP】【Uva437】UVA437 The Tower of Babylon
传送门 Description Input Output Sample Input 1 10 20 30 2 6 8 10 5 5 5 7 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 ...
- Uva 437 - The Tower of Babylon(DP)
题目链接 https://vjudge.net/problem/UVA-437 [题意] 给定n种不同的立方体,每种立方体都有无穷多个,现在要用它们跌放在一起组成一个巴比伦塔,并且处在某 ...
- ASCII、Unicode、GBK和UTF-8字符编码的区别联系
一直对编码这块晕晕乎乎,今天终于看到一篇写的很清楚也很风趣的文章,转过来mark一下. 很久很久以前,有一群人,他们决定用8个可以开合的晶体管来组合成不同的状态,以表示世界上的万物.他们看到8个开关状 ...
- Unicode 和 UTF-8关系
unicode 就是 "与存储无关的表示",utf-8 就是 "二进制表示".一句话,utf8是对unicode字符集进行编码的一种编码方式,utf8是给uni ...
- unicode,ansi,utf-8,unicode big endian编码的区别
为什么80%的码农都做不了架构师?>>> 随便说说字符集和编码 快下班时,爱问问题的小朋友Nico又问了一个问题: "sqlserver里面有char和nchar,那 ...
最新文章
- 运维监控系统——配置服务监控项(Http,Nginx,MySQL)
- 《ANTLR 4权威指南》——2.1节从ANTLR元语言开始
- jetson nano 人脸识别
- sqlserver数据库创建表
- 牛客练习赛26 D	xor序列 (线性基)
- string函数知识点总结
- matlab哈明窗带阻,基于matlabFIR低通,高通,带通,带阻滤波器设计.doc
- 我也给要来澳大利亚的虫子们一点建议
- lua upvalue
- 计算机服务中无spool,打印服务SPOOLSV.EXE自动停止
- JMeter下载及使用
- Linux权限的理解 | 粘滞位 |权限掩码 |文件类型
- 开发者新手指南:一文汇总 Web3 开发工具
- 复利计算器app发布
- Android 报错Android - Performing stop of activity that is not resumed
- 【4G5G基础学习】物理层-物理随机接入信道PRACH与随机接入过程
- 找不到msvcr110.dll
- win10在此计算机上找不到系统映像,图文教你win10系统使用DISM修复找不到源的问题....
- Altera特殊管脚的使用(适用全系列Altera FPGA,MSEL区别除外)-来自altera论坛
- Android 原生分享文件到微信
热门文章
- delphi调用选择目录对话框
- 23种设计模式C++源码与UML实现--适配器模式
- volatile类型的数据
- 25匹马,找出最快的3匹,但是只有5个赛道,每次比赛只能得到5匹马的速度排序,那么最少需要多少次比赛
- 【❌❌N种姿势满足你遍历C++ vector⭕⭕】C++ vector 遍历
- PyTorch基础(十)----- torch.max()方法
- 操作系统(二十七)管程
- linux不能ping通域名能ping通ip
- 从Tensorflow代码中理解LSTM网络
- android的窗口机制分析------UI管理系统