整理的算法模板合集: ACM模板



本题和基础的矩形覆盖差不多,只不过变成了三维的长方形。
因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b)来表示顶面即可。
但是因为长方体的长宽高可能会很大,所以如果我们直接用一个数组表示数值的话是存不下的,因此我们令开一个数组存下所有点的信息,用x表示每一个点的标号即可。至于如何表示高是谁(高实际上就是我们放置这个长方体时获得的权值)因为一共有三个边的长度,我们可以将他们标号为0,1,2,放到一个数组里,我们用k表示这个高的标号,我们每次找答案的时候直接枚举拿一条边是高,然后长和宽我们就可以直接等于(k + 1) % 3 以及 (k + 2) % 3。这样就可以简单明了地表示各各需要的状态了。

我们直接记忆化搜索解决即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>#define x first
#define y second
using namespace std;
typedef long long ll;
typedef pair<int,int> PII;const int N = 207, M = 5e3 +7, maxn = 1007;
const int mod = 1e9+7;
const int INF = 0x3f3f3f3f;int n, m;
struct node{int po[3];
}pos[N];int idx;
int kcase;
int f[N][3];
//x表示的是长方体的编号,k表示的是哪一条边是高
int dp(int x, int k)
{if(f[x][k] > 0)return f[x][k];int& ans = f[x][k];ans = pos[x].po[k];//初始化为该长方体的高for(int i = 1; i <= n; ++ i)for(int j = 0; j <= 2; ++ j){int ua = (k + 1) % 3;//上面的长和宽的编号int ub = (k + 2) % 3;//if(ua > ub)这个不能用于比较//    swap(ua, ub);int da = (j + 1) % 3;//下面的长和宽int db = (j + 2) % 3;if((pos[x].po[ua] < pos[i].po[da] && pos[x].po[ub] < pos[i].po[db]) || (pos[x].po[ub] < pos[i].po[da] && pos[x].po[ua] < pos[i].po[db])){ans = max(ans, dp(i, j) + pos[x].po[k]);}}return ans;
}int main()
{while(scanf("%d", &n) != EOF && n){memset(pos, 0, sizeof pos);memset(f, 0, sizeof f);for(int i = 1; i <= n; ++ i)scanf("%d%d%d", &pos[i].po[0], &pos[i].po[1], &pos[i].po[2]);int ans = -INF;for(int i = 1; i <= n; ++ i)for(int k = 0; k <= 2; ++ k)ans = max(ans, dp(i, k));printf("Case %d: maximum height = %d\n", ++ kcase, ans);}return 0;
}

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

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

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

  2. 嵌套矩形——DAG上的动态规划

    有向无环图(DAG,Directed Acyclic Graph)上的动态规划是学习动态规划的基础.很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 题目描述: 有n个矩形,每个矩形可以用 ...

  3. 南阳OJ 16 矩形嵌套

    描写叙述 有n个矩形,每个矩形能够用a,b来描写叙述,表示长和宽. 矩形X(a,b)能够嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度). ...

  4. NYOJ 16(矩形嵌套)

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a< ...

  5. nyoj 16 矩形嵌套 (DAG上的DP)

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a< ...

  6. NYOJ 16 矩形嵌套

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a< ...

  7. NYOJ 16 矩形嵌套(动态规划)

    矩形嵌套 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a< ...

  8. Codeup-问题 A: 问题 A: 矩形嵌套

    题目描述 有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c,d)中当且仅当a<c,b<d或者b<c,a<d(相当于旋转X90度).例如( ...

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

最新文章

  1. docker挂载目录原理
  2. 使用BootStrap制作用户登录UI
  3. IE开发人员工具之实用功能讲解
  4. UESTC学位论文latex模板下载
  5. linux 下串口转usb不能发送数据包,红帽redhat下 串口转USB问题 linux
  6. numa节点_NUMA架构下的内存访问延迟区别!
  7. discuz mysql data_discuz调取数据库数据
  8. bandicam安装注册
  9. 解决google浏览器自动填充密码问题
  10. 使用screw一键生成数据库文档
  11. [译] MySQL 最佳实践 —— 高效插入数据
  12. 基于k-近邻算法的室内WiFi位置指纹定位实验报告
  13. java汉诺塔(含汉诺塔问题的详解)
  14. java 内联_Java内联类初探
  15. SAP中采购订单历史分类标识与实际业务描述
  16. 服务器合租与虚拟主机的区别
  17. Segment Anything论文详解(SAM)
  18. Google Android:羊养肥了再杀?
  19. 未雨绸缪-变化是永恒的
  20. crm系统服务器端,安装 Microsoft Dynamics CRM 前端服务器和后端服务器角色

热门文章

  1. 科研助力|计算机科学方向一对一科研项目
  2. 树莓派安装openCV做图像识别
  3. 可微分的「OpenCV」:这是基于PyTorch的可微计算机视觉库
  4. 链表问题7——判断一个链表是否为回文结构(进阶)
  5. 所有企业要注意了,你随时可能掉进GDPR这个坑里!
  6. 安装完之后设置动态ip地址
  7. 解决WIN7下组播问题
  8. 获取手机上的相关参数方法
  9. html5 点击事件委托,jquery事件委托
  10. java打印四行等腰三角形_(c语言程序案例.doc