【UVA 437】The Tower of Babylon(记忆化搜索写法)
【题目链接】:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=378
【题意】
给你n个方形;
由3个属性,长宽高决定;
你可以任意摆放这个方形(即把哪一面朝下方);
然后每种方形都有无限个;
一个方形能够摆在另外一个方形上面,当且仅当这个方形的长和宽都严格大于另外一个方形的长和宽(即changi>changj && kuani>kuanj);
问你这n个方形最多能叠多高;
【题解】
把每个方形的3种摆法都取出来;
(即取3个属性中的某一个属性出来作为高,另外两个作为宽和长);
然后如果某一个方形x可以放到另外一个方形y的上面;
则连一条有向边从x指向y;
然后问题就能转化为一个有向无环图上的最长路了;
起点不一定
也即一条最长链
写个记忆化搜索就好;
f[x]=max(f[x],f[y]+h[x]),(x,y)∈E,h[x]为x的高
【Number Of WA】
1
【反思】
忘记初始化+忘记输出Case
【完整代码】
#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define ms(x,y) memset(x,y,sizeof x)
#define Open() freopen("D:\\rush.txt","r",stdin)
#define Close() ios::sync_with_stdio(0)
typedef pair<int,int> pii;
typedef pair<LL,LL> pll;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0);
const int N = 30;
struct abc{
LL c,k,g;
};
int n,b[4],nn;
LL dp[N*3+100];
abc a[N*3+100];
vector <int> G[N*3+100];
LL dfs(int x){
if (dp[x]!=-1) return dp[x];
LL &ans = dp[x];
ans = a[x].g;
int len = G[x].size();
rep1(i,0,len-1){
int y = G[x][i];
ans = max(ans,dfs(y) + a[x].g);
}
return dp[x];
}
int main()
{
//Open();
int kk = 0;
while (~scanf("%d",&n) && n){
kk++;
ms(dp,-1);
nn = 0;
rep1(i,1,N*3) G[i].clear();
rep1(i,1,n){
rep1(j,1,3)
scanf("%d",&b[j]);
sort(b+1,b+1+3);
rep1(j,1,3){
nn++;
rep2(k,3,1)
if (k!=j){
a[nn].c = b[k];
break;
}
rep1(k,1,3)
if (k!=j){
a[nn].k = b[k];
break;
}
a[nn].g = b[j];
}
}
n = nn;
rep1(i,1,n)
rep1(j,1,n)
if (a[i].c > a[j].c && a[i].k > a[j].k)
G[i].pb(j);
LL d = 0;
rep1(i,1,n)
d = max(d,dfs(i));
printf("Case %d: maximum height = ",kk);
printf("%lld\n",d);
}
return 0;
}
【UVA 437】The Tower of Babylon(记忆化搜索写法)的更多相关文章
- poj1179 区间dp(记忆化搜索写法)有巨坑!
http://poj.org/problem?id=1179 Description Polygon is a game for one player that starts on a polygon ...
- UVA 10003 Cutting Sticks 区间DP+记忆化搜索
UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的 ...
- UVA 10400 Game Show Math (dfs + 记忆化搜索)
Problem H Game Show Math Input: standard input Output: standard output Time Limit: 15 seconds A game ...
- UVA 11884 A Shooting Game(记忆化搜索)
A and B are playing a shooting game on a battlefield consisting of square-shaped unit blocks. The bl ...
- hdu 2089 记忆化搜索写法(数位dp)
/* 记忆化搜索,第二维判断是否是6 */ #include<stdio.h> #include<string.h> #define N 9 int dp[N][2],digi ...
- UVa 437 The Tower of Babylon
Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of ...
- UVa 437 The Tower of Babylon(经典动态规划)
传送门 Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details ...
- UVa 437 The Tower of Babylon(DP 最长条件子序列)
题意 给你n种长方体 每种都有无穷个 当一个长方体的长和宽都小于还有一个时 这个长方体能够放在还有一个上面 要求输出这样累积起来的最大高度 由于每一个长方体都有3种放法 比較不好控制 ...
- UVA - 437 The Tower of Babylon(dp-最长递增子序列)
每一个长方形都有六种放置形态,其实可以是三种,但是判断有点麻烦直接用六种了,然后按照底面积给这些形态排序,排序后就完全变成了LIS的问题.代码如下: #include<iostream> ...
随机推荐
- vmware workstation pro 14 虚拟机无法开启、黑屏的解决方案汇总
方案1:卸载鲁大师,重启. 方案2:管理员命令行,输入netsh winsock reset,重启. 方案3:360安全管家修复LSP,重启. 方案4:卸载14.0,安装12.0,手动导入虚拟机.
- STM8S103之串口
1.串口发送中断标志的清除,只能靠往UART_DR中写数据,这个的本质含义是,发送中断是指发送完成中断,所以往UART_DR中写数据可以清除发送中断标志.但是这样又会导致新写的数据完成后又会产生中断, ...
- js 关于height()、innerHeight()、outerHeight()函数的区别
- vue 事件上加阻止冒泡 阻止默认事件
重点 vue事件修饰符 <!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- 提 ...
- win10安装node/yarn报错2503/2502
当我们从node官网下载windows安装包时会得到一个msi文件,由于win10的安全策略比较严格,所以我们在右键菜单上找不到以管理员运行这个按钮: 普通的exe文件: msi文件: 解决办法: 此 ...
- [UVa10188]Automated Judge Script
题目大意:叫你写一个判断答案的系统. 解题思路:模拟即可.AC条件为,答案条数相等,所有字符相等.PE条件为,答案条数可能不等,所有数字字符相等.其他为WA. UVa现在的C++已经不支持gets了, ...
- BZOJ 1444 [JSOI2009]有趣的游戏 (Trie图/AC自动机+矩阵求逆)
题目大意:给你$N$个长度相等且互不相同的模式串,现在有一个字符串生成器会不断生成字符,其中每个字符出现的概率是$p_{i}/q_{i}$,当生成器生成的字符串包含了某个模式串,则拥有该模式串的玩家胜 ...
- 【Computer Vision】图像单应性变换/投影/仿射/透视
一.基础概念 1. projective transformation = homography = collineation. 2. 齐次坐标:使用N+1维坐标来表示N维坐标,例如在2D笛卡尔坐标 ...
- 紫书 例题8-7 UVa 11572(滑动窗口)
滑动窗口这个方法名字非常形象, 先是窗口的右指针尽量往右滑, 滑不动了就滑窗口的左指针, 滑到右指针又可以开始滑动为止. 这道题是要记录滑的过程中最大的窗口长度, 限制条件是窗口中不能出现重复的值. ...
- iOS AES的加密解密
主要是要得到加密后的原来的字符创,MD5无法得到原有的,仅仅能用AES+base64 要用GTMBase64这个能够自己去下载, 主要看另外2个类文件. #import <Foundation/ ...