The Tower of Babylon(UVa 437)
题意:有n种立方体,每种都有无穷多个。选一些正方体摞成一根尽量高的柱子(可以选择任意一条边做高),使得每个立方体的底面长宽分别严格小于它下方的立方柱的底面长宽。
题解:可以套用DAG最长路算法,可以使用二元组来表示每个立方体的每一条边,如v[n][2]就可以用来表示第n个立方块的3个边。
DAG最长路算法:
int dp(int i,int j)
{
int &ans=dist[i][j];
if(ans>) return ans;///表示已经查找过此种状态
ans=;///根据题意赋相应的初值
int v[],v2[];
get_dimensions(v,i,j);///用v数组表示每个方块的长宽高
for(int a=;a<n;a++)
for(int b=;b<;b++){///对每种放置方法进行枚举
get_dimensions(v2,a,b);
if(v2[]<v[]&&v2[]<v[]) ans=max(ans,dp(a,b));///符合条件的方块,进行放置,查看是否最优,此处只是对下一个状态进行最优查找,并未将当前状态的高度计入(因为当前方案不一定可行)
}
ans+=blocks[i][j];///放置此种方块的方案可行,进行放置
return ans;
}
本题代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int maxn=+;
int blocks[maxn][],dist[maxn][],n; void get_dimensions(int* v, int b, int dim) {
int idx = ;
for(int i=;i<;i++)
if(i != dim) v[idx++] = blocks[b][i];///找出每个方块对应的长,宽,高
} int dp(int i,int j)
{
int &ans=dist[i][j];
if(ans>) return ans;///表示已经查找过此种状态
ans=;
int v[],v2[];
get_dimensions(v,i,j);///用v数组表示每个方块的长宽高
for(int a=;a<n;a++)
for(int b=;b<;b++){///对每种放置方法进行枚举
get_dimensions(v2,a,b);
if(v2[]<v[]&&v2[]<v[]) ans=max(ans,dp(a,b));///符合条件的方块,进行放置,查看是否最优,此处只是对下一个状态进行最优查找,并未将当前状态的高度计入(因为当前方案不一定可行)
}
ans+=blocks[i][j];///放置此种方块的方案可行,进行放置
return ans;
} int main()
{
int kase=;
while(~scanf("%d",&n)&&n){
for(int i=;i<n;i++){
for(int j=;j<;j++) scanf("%d",&blocks[i][j]);
sort(blocks[i],blocks[i]+);
}
memset(dist,,sizeof(dist));
int ans=;
for(int i=;i<n;i++)
for(int j=;j<;j++){///枚举每个方块的每种摆放位置
ans=max(ans,dp(i,j));
}
printf("Case %d: maximum height = %d\n",++kase,ans);
}
return ;
}
The Tower of Babylon(UVa 437)的更多相关文章
- The Tower of Babylon UVA - 437 DAG上的动态规划
题目:题目链接 思路:每个方块可以用任意多次,但因为底面限制,每个方块每个放置方式选一个就够了,以x y为底 z 为高,以x z为底 y 为高,以y z为底 x为高,因为数据量很小,完全可以把每一种当 ...
- UVA 437 十九 The Tower of Babylon
The Tower of Babylon Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Subm ...
- 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
Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details of ...
- UVa 437 The Tower of Babylon(DP 最长条件子序列)
题意 给你n种长方体 每种都有无穷个 当一个长方体的长和宽都小于还有一个时 这个长方体能够放在还有一个上面 要求输出这样累积起来的最大高度 由于每一个长方体都有3种放法 比較不好控制 ...
- uva The Tower of Babylon[LIS][dp]
转自:https://mp.weixin.qq.com/s/oZVj8lxJH6ZqL4sGCXuxMw The Tower of Babylon(巴比伦塔) Perhaps you have hea ...
- UVA The Tower of Babylon
The Tower of Babylon Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many det ...
- POJ2241——The Tower of Babylon
The Tower of Babylon Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2207 Accepted: 1 ...
- UVA437-The Tower of Babylon(动态规划基础)
Problem UVA437-The Tower of Babylon Accept: 3648 Submit: 12532Time Limit: 3000 mSec Problem Descrip ...
随机推荐
- ERROR 1666 (HY000): Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.
centos7.5 binlog恢复数据失败 问题: mysql> \. /tmp/inc.sql ERROR 1050 (42S01): Table 'new_1' already exist ...
- Android中的task和stack
今天在重新理了一遍intent的过程中发现task是一个神奇的东西,而它又和stack有着很深的联系.task顾名思义是一个任务,但是这个任务可不一定只是来自一个app,比如我用微信来发一张图片,那么 ...
- #map+LCA# Codeforces Round #362 (Div. 2)-C. Lorenzo Von Matterhorn
2018-03-16 http://codeforces.com/problemset/problem/697/C C. Lorenzo Von Matterhorn time limit per t ...
- 使用Log4j2实现日志输出
一.说明 如果是使用slf4j规范的,请先引用: <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-s ...
- (转载)UnityShader学习笔记(七) 让贴图纹理动起来(河流瀑布特效、精灵序列帧实现)
大家好,我是Zander.这一章我们将使用纹理贴图实现动画.混合和真实特效来达到理想的效果. 纹理贴图可以使我们的着色器快速的实现逼真的效果,但是如果添加的纹理贴图过多,会非常影响游戏性能,特别是在移 ...
- js 奇偶判断
function isOdd(num) { == ; } function isEven(num) { == ; } function isSane(num) { return isEven(num) ...
- source insight常用设置问题
http://www.cnblogs.com/bluestorm/archive/2012/10/28/2743792.html
- Asp.net core 学习笔记 (library)
refer : https://docs.microsoft.com/en-us/dotnet/core/tutorials/library-with-visual-studio https://do ...
- php-parser在Aop编程中的使用
在laravel下使用php-parser实现aop composer require nikic/php-parser Test.php <?php /** * Created by PhpS ...
- 【百度地图API】如何获取行政区域的边界?(转载)
转自:http://www.cnblogs.com/milkmap/archive/2012/04/11/2442430.html 摘要:以前教过大家如何自行获取行政区域,或者自定义获取一个区域的边界 ...