uva 437 The Tower of Babylon(dp,记忆化搜索)

UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索) 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形。 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b)来表示顶面即可。 但是因为长方体的长宽高可能会很大,所以如果我们直接用一个数组表示数值的话是存不下的,因此我们令开一个数组存下所有点的信息,用x表示每一个点的标号即可。至于如何表示高是谁(高实际上就是我们放置这个长方体时获得的权值)因为一共有三个边的长度,我们可以将他们标号为0,1,2,放到一个数组里,我们用k表示这个高的标号,我们每次找答案. 阅读详情


垒箱子,保证上面的箱子长宽严格小于下面的箱子,求最大高度

dp[k][t]以第k个箱子为底的最大高度,记忆化搜索

#include<stdio.h>
#include<string.h>
#define MAXN 35
int dp[MAXN][3];
int block[MAXN][3];
int vis[MAXN],n;
bool judge(int i,int a,int j,int b)
{
	int ie0=block[i][a],ie1=block[i][(a+1)%3],
		je0=block[j][b],je1=block[j][(b+1)%3];
	if(je0<ie0&&je1<ie1||je0<ie1&&je1<ie0) return true;
	else return false;
}
int max(int a,int b) {return a>b?a:b;}
int dfs(int k,int t)
{
	if(dp[k][t]) return dp[k][t];
	int ans=0;
	for(int i=0;i<n;i++)
	{
		if(vis[i]) continue;
		for(int j=0;j<3;j++)
		{
			if(judge(k,t,i,j))
			{
				ans=max(ans,dfs(i,j)+block[i][(j+2)%3]);
			}
		}
	}
	dp[k][t]=ans;
	return ans;
}
int main()
{
	int cas=1;
	while(scanf("%d",&n)!=EOF&&n)
	{
		for(int i=0;i<n;i++)
			for(int j=0;j<3;j++)
				scanf("%d",&block[i][j]);
		memset(dp,0,sizeof(dp));
		for(int i=0;i<n;i++)
			for(int j=0;j<3;j++)
			{
				memset(vis,0,sizeof(vis));
				dfs(i,j);
			}
		int ans=0; 
		for(int i=0;i<n;i++)
			for(int j=0;j<3;j++)
			{
				dp[i][j]+=block[i][(j+2)%3];
				if(dp[i][j]>ans) ans=dp[i][j];
			}
		printf("Case %d: maximum height = %d\n",cas++,ans);
	}
	return 0;
}


SAP-ML章<<<<第二节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>> #SAP-ML章<<<<第一节:物料账报错处理ABAP编程错误:RAISE_EXCEPTION>>>> 1.物料账报错提示: ABAP编程错误:RAISE_EXCEPTION ABAP程序:SAPLFCML4H_RUN_PRICES应用组件CO-PC-ACT 2. 物料账报错背景: CKMLCP运行结算时 3. 解决方案: 通过DEBUG查看错误的地方 OKTZ:分析原因为:可能打包或者配置传输时弄错 ... 阅读详情

相关推荐

ElaticSearchUtil工具类封装

package com.xxx.util; import org.elasticsearch.action.admin.cluster.state.ClusterStateResponse; import org.elasticsearch.action.admin.indices.analyze.AnalyzeAction; import org.elasticsearch.action.ad

会飞的狼 6295

【动态规划】UVA - 437 The Tower of Babylon题解(DAG+记忆化搜索DP)

难度等级:3 题目:UVA - 437 The Tower of Babylon 题意: 给出n个矩形石块,有x,y,z(长宽高),有无限个,小块往大块上堆叠(严格小,即上下面积不能相同),求用这些块堆叠的最大高度。 思路: 通过第一个样例可知,一块有三用,假设x<y<z,底部面积有3种情况:①(x,y,z)②(x,z,y)③(y,z,x) 每种有无限块。题目给出n块(n<=30),故最多不超过3*30种 建立DAG有向图,把每个块之间的信息储存下来,判断如下,如果第i块x,y大...

zhangzheny的博客 222

【ANSYS APDL】提取结构刚度矩阵完整过程--附Python代码实现

ANSYS的结构刚度矩阵提取中一些操作技巧

m0_61038364的博客 1万+

UVa 437.The Tower of Babylon【记忆化搜索+dp】【4月25】

The Tower of Babylon Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of this tale have been forgotten. So now, in line with the educationa

Mr丶Gao 385

YOLOv9改进,YOLOv9添加CBAM注意力机制

CBAM是一个简单而有效的注意力模块,用于前馈卷积神经网络。给定一个中间特征图,我们的模块按顺序推断两个独立维度(通道和空间)的注意力图,然后将注意力图乘以输入特征图以进行自适应特征细化。由于 CBAM 是一个轻量级的通用模块,因此它可以无缝集成到任何 CNN 架构中,开销可以忽略不计,并且可以与基础 CNN 一起进行端到端训练。论文链接:(CBAM论文)

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 856

例题9-2 UVa437 The Tower of Babylon(DP:DAG中的最长路)

题意: 看白书 要点: 将x,y,h分别作为高,这样n就转换为3*n种立方体,而且因为每种都有无穷个,所以正好自己叠在自己上的情况也考虑到了,这就转换为前面的嵌套矩形问题,进行一次记忆化搜索即可。 #include #include #include #include using namespace std; struct node { int x, y, h; }a[350*3

SeasonJoe的博客 545

UG二次开发GRIP创建drill工序

UG二次开发GRIP创建drill工序

qq285503851的博客 1694

uva437 - The Tower of Babylon(DAG上的DP)

题目:uva437 - The Tower of Babylon(DAG上的DP) 题目大意:给你一些立方体,给出长宽高XYZ。现在希望你将这些立方题叠起来,使得最后的高度最大,并且这些立方体是可以无限次使用的,但是一个立方体要在另一个立方体的上面的话是需要满足这个立方体的底面是可以完全包含在下面的那个立方体的底面。 解题思路:其实这里的无限次使用没有什么用,因为一个立方体最多

3542

手把手教你玩转CPU微架构--​第三章:乱序执行的“魔法”——如何让指令“插队”提升效率​​3.4 动手实验:用Gem5模拟器分析乱序执行对IPC的提升(对比顺序执行)

摘要:本章通过Gem5模拟器对比乱序执行(O3CPU)和顺序执行的性能差异,实验采用SPECCPU2017和PARSEC3.0基准测试,配置7级流水线、4指令/周期发射宽度及多级缓存。结果显示,乱序执行平均提升IPC超过100%,关键因素包括动态指令调度、缓存命中率提升(L1达92%)和TAGE分支预测(准确率95%)。优化方向包括增大指令缓存和发射队列深度。实验验证了乱序执行在减少流水线停顿和提升吞吐量方面的显著优势。

MHD0815的博客 165

《网络安全自学教程》- Nmap使用及扫描原理分析

使用Nmap进行端口扫描、主机发现、服务识别、操作系统识别、指定脚本、结果导出文件,使用wireshark抓包分析扫描原理。

wangyuxiang946的博客 1万+

DAG的DP(UVA437 巴比伦塔 The Tower of Babylon)

DAG 是一种没有环路的有向图,具有拓扑序特性。动态规划在 DAG 上的应用通常基于拓扑序或记忆化搜索。(像我这种暂时还没学过拓扑排序的可以用dfs+记忆化搜索)

2401_88124440的博客 1024

[个人自用,全网最优]EDEM-FLUENT个人自学教程,拒绝手忙脚乱无用功!

[个人自用,全网最优]EDEM-FLUENT个人自学教程,拒绝手忙脚乱无用功!

zheaa的博客 4826

UVa 437 巴比伦塔(The Tower of Babylon)详细题解

题目传送门:https://vjudge.net/problem/UVA-437题目:Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of this tale have been forgotten. So now, in line with the educational na

Monica 1394

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

UVa OJ 437 - The Tower of Babylon

UVa OJ 437 - The Tower of BabylonProblemThe babylonians had n types of blocks, and an unlimited supply of blocks of each type. Each type-i block was a rectangular solid with linear dimensions (xi, yi,

Yuuki_Dach's Blog 451

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

The Tower of Babylon(UVA437)

题目:UVA437 这题有点类似矩阵嵌套 思路:将每一个立方体都转换成三个矩形,而它的价值就是另一条边,这些矩形如果有长、宽都相等的,就选择价值大的,然后小的矩形嵌套在大的矩形里面,选择一个连续的并且价值最大 #include <stdio.h> #include <string.h> #include <algorithm> using namespace s...

多一些不为什么的坚持 430

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

uva 437 The Tower of Babylon (DAG)

uva 437 The Tower of BabylonPerhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of this tale have been forgotten. So now, in line with the educational nature of this con

总有那么一群人喜欢盯着我的博客看,估计这是他们见过最长的博客名,我必须得告诉他们博客名最长可以写多长 881

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

【题目链接】:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=378 【题意】 给你n个方形; 由3个属性,长宽高决定; 你可以任意摆放这个方形(即把哪一面朝下方); 然后每种方形都有无限个...

AWCXV 107

uva 437 The Tower of Babylon(DAG最长路)

题目连接:437 - The Tower of Babylon 题目大意:可以理解成有n种类型的长方体,现在给出每中长方体的长宽高, 然后要选取若干个长方体来玩堆积木(可以选取同种类型的长方体), 要尽量使得堆出来的塔越高, 堆积木的时候要求下面的积木长宽一定要分别大于上面的那个积木(这样同种积木也有可能叠加)。 解题思路:DAG最长路径, 因为下面一个的长方体的长宽要分别大于

不慌不忙、不急不躁 1692

UVA437 巴比伦塔 The Tower of Babylon

你可能已经听说过巴比伦塔的传说。现在这个传说的许多细节已经被遗忘。所以本着本场比赛的教育性质,我们现在会告诉你整个传说:巴比伦人有n种长方形方块,每种有无限个,第i种方块的三边边长是xiyizi。对于每一个方块,你可以任意选择一面作为底,这样高就随着确定了。举个例子,同一种方块,可能其中一个是竖着放的,一个是侧着放的,一个是横着放的。他们想要用堆方块的方式建尽可能高的塔。问题是,只有一个方块的底的两条边严格小于另一个方块的底的两条边,这个方块才能堆在另一个上面。

Gowi的博客 1175

[UVA437] The Tower of Babylon

描述 UVA437 思路 每种长方体可重复使用, 而每种长方体有六种摆放方式,所以可以将每个可随机摆放长方体视为摆放方式固定的六个长方体。 对于与长方体的堆叠,考虑上下长方体的x, y , 所以可以将长方体按x降序排列。 然后就是动态规划问题. 题解 #include <algorithm> #include <string> #include <iostream&...

weixin_43009878的博客 185

UVA 437 The Tower of Babylon 题解(DAG上的DP+神奇的数组索引设置)

题目传送门:UVA 437 巴比伦塔 题意:有n(n≤30)种立方体,每种都有无穷多个。要求选一些立方体摞成一根尽量高的柱子(可以自行选择哪一条边作为高),使得每个立方体的底面长宽分别严格小于它下方立方体的底面长宽。 分析:这个一看就是DAG上的最长路,瞬间写出状态转移方程: 以dp[i][j]表示当前立方体长款分别为i和j,往它上面堆立方体,使其满足条件的最大高度 则dp[i][j] =...

阿飝的博客 985

UVA 437 The Tower of Babylon DAG上dp

https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=378 题目大意:给你一些立方体,给出长宽高X、Y、ZX、Y、ZX、Y、Z。现在希望你将这些立方题叠起来,使得最后的高度最高,并且这些立方体是可以无限次使用的,但是一个立方体要放在另一...

xiji333的博客 300

UVA437 The Tower of Babylon(记忆化搜索)

传送门 首先一种立方体相当于三种底面不同的立方体,不难发现这里只有底面尺寸能影响到决策,每次输入一个立方体就存三种立方体,因此本题相当于前面嵌套矩形模板的裸题 仍是考虑逆序递推,使用一元组dp[i]记录从序号为i的立方体开始能向下不断叠加的最大高度,那么使用DAG的记忆化搜索模板,对每个立方体搜索,取答案中最大的即可 这种DAG的dp貌似写不了递推,因为感觉递推的话每次考虑叠加的应该是满足的底面...

Happig的博客 156

uva437 the tower of babylon

动态规划【记忆化搜索】

YHaX的博客 534

uva 437 The Tower of Babylon

题目:https://vjudge.net/problem/UVA-437 #include<iostream> #include<algorithm> #include<queue> #include<cmath> #include<math.h> #include<string> #include<string.h> #include<map> #include<unordered_map>.

qq_35752161的博客 162
上一篇: uva 10285 The Tower of Babylon(dp,记忆化搜索)
下一篇: uva 10404 - Bachet's Game(dp)
yjCola
博客等级 码龄14年 4粉丝 138原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值