9-2 The Tower of Babylon uva437 (DP)
题意:有n种立方体 每种都有无穷多个 要求选一些立方体叠成一根尽量高的柱子 (可以自行选择哪条边为高 )使得每个立方体的底面都严格小于他下方的立方体
为DAG模型
在任何时候 只有顶面的尺寸会影响到后续决策!!!!
可以采用a,b来表示顶面尺寸 不过落实到dp会有一个问题: 因为a,b的值可能会很大 所以用(idx,k)来表示 idx为立方体的编号 k为第几条边作为高
dp[i][j]表示以 第i个立方体 第k条边为高(注意有序化) 作为最底下的立方体的最大高度
所以可以很轻松得出dp主过程:
fo(i,n)
fo(j,3)
ans=max(ans,dp(i,j));
就是枚举完所有的
状态总数为 n 每个状态的决策有n个 所以 时间复杂度n2
#include<bits/stdc++.h>
using namespace std;
#define N 40
#define fo(i,n) for(int i=0;i<(n);i++) int n;
int block[N][N];
int d[N][N]; void getdimensions(int *v,int i,int j)
{
int idx=;
fo(a,)
if(a!=j)v[idx++]=block[i][a];
} int dp(int i,int j)
{
int& ans=d[i][j];//为了不用打d[i][j] 更加快
if(ans>)return ans;//避免重复计算
ans=;
int v[],v2[];
getdimensions(v,i,j);//读取该状态下 顶面的边长
fo(a,n)
fo(b,)
{
getdimensions(v2,a,b);
if(v[]>v2[]&&v[]>v2[])ans=max(ans,dp(a,b));
}
ans+=block[i][j];//改变了d[i][j]
return ans;//又传递了值
} int main()
{
int cas=;
while(~scanf("%d",&n)&&n)
{
fo(i,n)
{
fo(j,)scanf("%d",&block[i][j]);
sort(block[i],block[i]+);//注意一定要有序化 才能比较
}
memset(d,,sizeof d);
int ans=;
fo(i,n)//这里反过来也是一样的 因为是一个记忆化枚举的过程 所有的状态都会被枚举到
fo(j,)
ans=max(ans,dp(i,j));
printf("Case %d: maximum height = %d\n",++cas,ans);
}
return ;
}
9-2 The Tower of Babylon uva437 (DP)的更多相关文章
- UVA 427 The Tower of Babylon 巴比伦塔(dp)
据说是DAG的dp,可用spfa来做,松弛操作改成变长.注意状态的表示. 影响决策的只有顶部的尺寸,因为尺寸可能很大,所以用立方体的编号和高的编号来表示,然后向尺寸更小的转移就行了. #include ...
- 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)
[Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]) ...
- UVa 437 The Tower of Babylon(经典动态规划)
传送门 Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details ...
- ACM - 动态规划 - UVA437 The Tower of Babylon
UVA437 The Tower of Babylon 题解 初始时给了 \(n\) 种长方体方块,每种有无限个,对于每一个方块,我们可以选择一面作为底.然后用这些方块尽可能高地堆叠成一个塔,要求只有 ...
- UVA437-The Tower of Babylon(动态规划基础)
Problem UVA437-The Tower of Babylon Accept: 3648 Submit: 12532Time Limit: 3000 mSec Problem Descrip ...
- Uva437 The Tower of Babylon
https://odzkskevi.qnssl.com/5e1fdf8cae5d11a8f572bae96d6095c0?v=1507521965 Perhaps you have heard of ...
- HOJ 1438 The Tower of Babylon(线性DP)
The Tower of Babylon My Tags Cancel - Seperate tags with commas. Source : University of Ulm Internal ...
- [动态规划]UVA437 - The Tower of Babylon
The Tower of Babylon Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many d ...
- uva The Tower of Babylon[LIS][dp]
转自:https://mp.weixin.qq.com/s/oZVj8lxJH6ZqL4sGCXuxMw The Tower of Babylon(巴比伦塔) Perhaps you have hea ...
随机推荐
- 【字符串算法2】浅谈Manacher算法
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 字符串算法2:Manacher算法 问题:给出字符串S(限制见后)求出最 ...
- suoi31 最近公共祖先2 (倍增lca)
根为r时x.y的公共祖先,就是lca(x,r),lca(x,y),lca(r,y)中深度最大的那一个,不要再在倍增的时候判来判去还判不对了... #include<bits/stdc++.h&g ...
- cf980E TheNumberGames (贪心+倍增)
由于是$2^i$,所以一定要尽量留下来编号大的点 我们干脆就让n号点做树根,它是一定要留的 然后如果要留i的话,i一直到根的路径也都要留.所以只要判断一下够不够把这个路径上还没有留的都留下来 记录下已 ...
- docker重新安装后无法启动
问题描述: docker版本升级或者重新安装后,无法启动服务,出现如下报错: level=error msg="[graphdriver] prior storage driver over ...
- spring框架学习(四)AOP思想
什么是AOP 为什么需要AOP 从Spring的角度看,AOP最大的用途就在于提供了事务管理的能力.事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务(太烦),所以,Spring在你访问 ...
- 一个很实用的css3兼容工具很多属性可以兼容到IE6
当你看到这样的效果图是不是已经崩溃了 css3没出来之前大部分人基本都是用图片的方式拼出来的 腾讯邮箱就是这么做的 然后你想和设计说换直角吧.我用图片的好烦的感觉!而且我们还要兼容到ie6 她和你说别 ...
- 20155319 2016-2017-2 《Java程序设计》第5周学习总结
20155319 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 8 异常处理 - `try`和`catch`语法,如果被try{}的语句出现了catch() ...
- HDU 3371 Connect the Cities 最小生成树(和关于sort和qsort的一些小发现)
解题报告:有n个点,然后有m条可以添加的边,然后有一个k输入,表示一开始已经有k个集合的点,每个集合的点表示现在已经是连通的了. 还是用并查集加克鲁斯卡尔.只是在输入已经连通的集合的时候,通过并查集将 ...
- SpringBoot框架的权限管理系统
springBoot框架的权限管理系统,支持操作权限和数据权限,后端采用springBoot,MyBatis,Shiro,前端使用adminLTE,Vue.js,bootstrap-table.tre ...
- J - FatMouse's Speed dp
题目链接: https://vjudge.net/contest/68966#problem/J 找最长子串并且记录路径. TLE代码: #include<iostream> #inclu ...