分析:
一个立方体可能有三种高,因此一个立方体可以当三个立方体用,因为立方体是不限数量的
这个时候可以构建一个有向图,在O(n^2)内判断正方体的有向边,利用have_edge判断一个正方体
是否可以放在另一个正方体之上,然后就dp就可以了,dp的状态是

ans = max(dp[j][w] + rec[i][j].h, ans) 这里的ans是已经加好当前这个立方体高度的dp[i][j]
这个转移方程的意思是, 当前最高高度等于可以放上j, w(j, w可以取任意have_edge的正方体)这个立方体(但还没放上)的高度的最大值

当然也可以用放上写dp, 那状态可能更清晰点
如果是放上的话,那没有边应该return 0, 且一开始就应该加上第一个正方体的高度。
这个等读者自行理解。

这里要注意记忆化,否则会超时。
d[i][j] 表示以 i , j, 为正方形底部,可以达到的最大高度。

#include<bits/stdc++.h>
#define LL long long
#define ms(s) memset(s, 0, sizeof(s))
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define INF 0X7fffffff
using namespace std;
const int maxn = 100;struct Rec {int x, y, z;Rec(int x, int y, int z) : x(x), y(y), z(z) {}Rec() {}
}rec[maxn][3];int d[maxn][3];
bool have_edge[maxn][3][maxn][3];
int n;int dp(int i, int k) {int& ans = d[i][k];if (ans != -1) return ans;ans = rec[i][k].z;for (int j = 1; j <= n; j++) {for (int w = 0; w <= 2; w++) {if (have_edge[i][k][j][w]) {ans = max(ans, dp(j, w) + rec[i][k].z);}}}return ans;
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);ios::sync_with_stdio(false);cin.tie(0);int kase = 0;while (cin >> n && n) {for (int i = 1; i <= n; i++) {cin >> rec[i][0].x >> rec[i][0].y >> rec[i][0].z;rec[i][1].x = rec[i][0].y; rec[i][1].y = rec[i][0].z;rec[i][1].z = rec[i][0].x; rec[i][2].x = rec[i][0].z;rec[i][2].y = rec[i][0].x; rec[i][2].z = rec[i][0].y;}memset(d, -1, sizeof(d));ms(have_edge);for (int i = 1; i <= n; i++) {for (int k = 0; k <= 2; k++) {for (int j = 1; j <= n; j++) {for (int w = 0; w <= 2; w++) {if ((rec[i][k].x > rec[j][w].x && rec[i][k].y > rec[j][w].y)||(rec[i][k].x > rec[j][w].y && rec[i][k].y > rec[j][w].x))have_edge[i][k][j][w] = true;}}}}int ans = -1;for (int i = 1; i <= n; i++) {for (int k = 0; k <= 2; k++) {ans = max(ans, dp(i, k));}}//Case 1: maximum height =std::cout << "Case " << ++kase << ": maximum height = ";std::cout << ans << endl;}return 0;
}

UVa 437 巴比伦塔(The Tower of Babylon)相关推荐

  1. 【UVA 437】The Tower of Babylon(记忆化搜索写法)

    [题目链接]:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  2. 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)

    [Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]) ...

  3. UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)

    整理的算法模板合集: ACM模板 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形. 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b) ...

  4. Uva 437 - The Tower of Babylon(DP)

    题目链接 https://vjudge.net/problem/UVA-437 [题意]        给定n种不同的立方体,每种立方体都有无穷多个,现在要用它们跌放在一起组成一个巴比伦塔,并且处在某 ...

  5. uva 437——The Tower of Babylon

    题意:给定n个长方体,然后堆积最高的塔,要求上面的面积小于下面的面积. 思路:Dp,先把长方体的所有放的情况都构造出来放到数组里,对于当前节点,如果能够在前面找到面积比当前小,高度累加比当前高的则转移 ...

  6. uva437The Tower of Babylon

    题意:给定n个长方体,叠加长方体,规则是上面的长方体长和宽都要小于下面的长方体.每种长方体有无数个,问叠加最高为多少. 分析:dp,递归搜索最大高度.' #include<iostream> ...

  7. 【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 ...

  8. UVa在线比赛单题汇总-----DP专题

    动态规划基础 例题 LA 3882 UVa 3882 - And Then There Was One 递推------------无力orz UVa 10635 10635 - Prince and ...

  9. C语言里 指针变量强制类型转换,C语言之强制类型转换与指针--#define DIR *((volatile unsigned int *) 0x0022)...

    强制类型转换形式:(类型说明符) (表达式) 举例说明:1) int a; a = (int)1.9; 2)char *b; int *p; p = (int *) b; //将b的值强制转换为指向整 ...

  10. DP(动态规划)总结

    1. 写在前面的话 之前写了一篇不像总结的动态规划总结,感觉更像是一个成长历程,所以就打算重写一篇. 2. 对DP简单的总结 dp的题目特点 求最大或者最小值(如背包:价值最大.凑硬币:数量最少--) ...

最新文章

  1. epoch如何设置_使用TFRecordDataset时如何设置epoch计数器?
  2. 助你进大厂,这些Mysql索引底层知识你是必须知道的。
  3. 中科大提出统一输入过滤框架InFi:首次理论分析可过滤性,支持全数据模态
  4. 解决报错:import sun.misc.BASE64Decoder无法找到
  5. 实用代码---取得当前的年月日,当前的时分秒获得,周几和星期几获得
  6. mybatis mysql demo_SpringBoot(入门Demo,整合mybatis,连接mysql)
  7. 怎么在自己的网站上显示其它网站_自己做网站要怎么选域名?
  8. MySQL表结构设计之范式化和反范式化对比
  9. 控制上网!!!(版本之1.1) 当前时间从网络取得。
  10. swagger 修改dto注解_Swagger注解及参数细节的正确书写。
  11. 2017第34届广州国际特许连锁加盟展览会会刊(参展商名录)
  12. HTML5+CSS大作业——“传统节日--端午节(9页)
  13. 【EXLIBRIS】#小词旮旯# 000 初衷
  14. 数字化转型之道:谈谈企业如何落地数据治理
  15. CQI原理及CQI指标优化
  16. 基于二值距离变换的图像细化的代码实现
  17. ASAN和HWASAN原理解析
  18. Postman中请求体提交方式
  19. LaTex常用技巧6:矩阵编写总结
  20. 数字图像 - 图像隐写

热门文章

  1. 凯文·凯利:最伟大的产品还没有被创造出来
  2. java append()_append()方法的坑
  3. CCProxy+Proxifier代理手机连接电脑(玩网游)支持VIST(防QQ不掉线)本文转载
  4. 老罗的悔改与锤子的落俗
  5. redis探索之常用的三种缓存读写策略
  6. 第05篇:Mybatis的SQL执行流程分析
  7. 雨课堂知识点总结(十六)
  8. linux死机,Linux 死机了怎么办
  9. java满天星星闪烁_满天星空的星星为什么闪烁?
  10. 揪出系统中秘密隐藏的木马(下)