The Tower of Babylon UVA - 437 DAG上的动态规划
题目:题目链接
思路:每个方块可以用任意多次,但因为底面限制,每个方块每个放置方式选一个就够了,以x y为底 z 为高,以x z为底 y 为高,以y z为底 x为高,因为数据量很小,完全可以把每一种当成DAG上的一个结点,然后建图找最长路径。
AC代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <list> #define FRER() freopen("in.txt", "r", stdin)
#define FREW() freopen("out.txt", "w", stdout) #define INF 0x3f3f3f3f using namespace std; struct block {
int x, y, z;
block() {}
block(int x, int y, int z):x(x), y(y), z(z) {}
bool operator < (const block & other) const {
return (x < other.x && y < other.y) || (x < other.y && y < other.x);
}
}; vector<block> vec; int n, m, d[];
bool G[][]; void init() {
vec.clear();
int x, y, z;
for(int i = ; i < n; ++i) {
cin >> x >> y >> z;
vec.push_back(block(x, y, z));
vec.push_back(block(x, z, y));
vec.push_back(block(y, z, x));
}
m = n * ;
memset(G, , sizeof(G));
for(int i = ; i < m; ++i)
for(int j = ; j < m; ++j)
if(vec[i] < vec[j])
G[i][j] = ; memset(d, , sizeof(d));
} int dp(int i, int h) {
if(d[i]) return d[i];
int& ans = d[i];
ans = h;
m = n * ;
for(int j = ; j < m; ++j) {
if(G[i][j])
ans = max(ans, dp(j, vec[j].z) + h);
}
return ans;
} int solve() {
int ans = -;
for(int i = ; i < m; ++i)
ans = max(ans, dp(i, vec[i].z));
return ans;
} int main()
{
//FRER();
//FREW();
ios::sync_with_stdio();
cin.tie(); int kase = ;
while(cin >> n, n) {
init();
cout << "Case " << ++kase << ": maximum height = " << solve() << endl;
} return ;
}
The Tower of Babylon UVA - 437 DAG上的动态规划的更多相关文章
- The Tower of Babylon(UVa 437)
题意:有n种立方体,每种都有无穷多个.选一些正方体摞成一根尽量高的柱子(可以选择任意一条边做高),使得每个立方体的底面长宽分别严格小于它下方的立方柱的底面长宽. 题解:可以套用DAG最长路算法,可以使 ...
- UVa 103 Stacking Boxes --- DAG上的动态规划
UVa 103 题目大意:给定n个箱子,每个箱子有m个维度, 一个箱子可以嵌套在另一个箱子中当且仅当该箱子的所有的维度大小全部小于另一个箱子的相应维度, (注意箱子可以旋转,即箱子维度可以互换),求最 ...
- 紫书 例题 9-2 UVa 437 ( DAG的动态规划)
很明显可以根据放不放建边,然后最一遍最长路即是答案 DAG上的动态规划就是根据题目中的二元关系来建一个 DAG,然后跑一遍最长路和最短路就是答案,可以用记忆化搜索的方式来实现 细节:(1)注意初始化数 ...
- UVA 1025 "A Spy in the Metro " (DAG上的动态规划?? or 背包问题??)
传送门 参考资料: [1]:算法竞赛入门经典:第九章 DAG上的动态规划 题意: Algorithm城市的地铁有 n 个站台,编号为 1~n,共有 M1+M2 辆列车驶过: 其中 M1 辆列车从 1 ...
- DAG上的动态规划之嵌套矩形
题意描述:有n个矩形,每个矩形可以用两个整数a.b描述,表示它的长和宽, 矩形(a,b)可以嵌套在矩形(c,d)当且仅当a<c且b<d, 要求选出尽量多的矩形排成一排,使得除了最后一个外, ...
- 第九章(二)DAG上的动态规划
DAG上的动态规划: 有向无环图上的动态规划是学习DP的基础,很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 1.没有明确固定起点重点的DAG模型: 嵌套矩形问题:有n个矩形,每个矩形可 ...
- UVA 437 The Tower of Babylon(DAG上的动态规划)
题目大意是根据所给的有无限多个的n种立方体,求其所堆砌成的塔最大高度. 方法1,建图求解,可以把问题转化成求DAG上的最长路问题 #include <cstdio> #include &l ...
- DAG 上的动态规划(训练指南—大白书)
有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.矩形嵌套 题目描述: ...
- DP入门(2)——DAG上的动态规划
有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 一.DAG模型 [嵌套矩形问题] 问题 ...
随机推荐
- nginx中文手册内容说明
1.什么是nginx? Nginx 是一个高性能的 Web 和反向代理服务器, 它具有有很多非常优越的特性: 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接, ...
- mysql存储方式MyISAM 和 InnoDB的区别
MyISAM 和 InnoDB 讲解: InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定.基本的差别为:MyISAM类型不支持事务处理等高级 ...
- 安装flask-mysqldb的时候,提示 mysql_config not found 的解决方法
解决办法: sudo apt-get install libmysqlclient-dev sudo updatedb locate mysql_config 然后进入mysql_config的路径( ...
- 7天学完Java基础之2/7
面向对象 面向对象的思想就是值我们要实现一个共功能的时候,我们不自己去做,而是找别人帮我们去做,帮我们去做的这个人就是对象.面向对象强调的是谁来帮我实现这个功能. 类与对象的关系 类:是一组相关属性和 ...
- Validation failed for one or more entities. See ‘EntityValidationErrors’,一个或多个验证错误 解决方法
try{// 写数据库}catch (DbEntityValidationException dbEx){ }在 dbEx 里面中我们就可以看到
- 七、SSR(服务端渲染)
使用框架的问题 下载Vue.js 执行Vue.js 生成HTML页面(首屏显示,依赖于vue.js的加载) 以前没有前端框架时,用jsp/php在服务器端进行数据的填充,发送给客户端就是已经填充好的数 ...
- JavaScript_HTML DEMO_3_节点
创建新的HTML元素 删除已有的HTML元素 <body> <div id="div1"> <p id="p1">这是一个段 ...
- 【洛谷5113】Sabbat of the witch(毒瘤分块)
点此看题面 大致题意: 给你一个序列,要你支持三种操作:区间赋值,区间求和,撤回之前任一区间赋值操作. 分块 这道题应该是一道十分毒瘤的分块题. 这道题要用到的算法并不是很难,但是思维难度是真的高. ...
- 2017.12.22 Java序列化中你不知道的事(一)
Java 序列化简介 Java 对象序列化是 JDK 1.1 中引入的一组开创性特性之一,用于作为一种将 Java 对象的状态转换为字节数组,以便存储或传输的机制,以后,仍可以将字节数组转换回 Jav ...
- Ubuntu安装mysql和简单使用
一.安装mysql sudo apt-get install mysql-server sudo apt-get isntall mysql-client sudo apt-get install l ...