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 ...
随机推荐
- SSO系统的实现
当一个网站系统比较大型的时候,我们通常采用面向服务的编程,采用分布式的编程.各个子系统共同来实现一个大的系统,这时候登录注册功能的实现也面临着一些问题. 一.WHAT? SSO是什么? sso是单点登 ...
- javaweb购物车实现的几种方式
之前没有接触过购物车的东东,也不知道购物车应该怎么做,所以在查询了很多资料,总结一下购物车的功能实现. 查询的资料,找到三种方法: 1.用cookie实现购物车: 2.用session实现购物车: 3 ...
- springmvc常用注解标签详解-推荐
1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ...
- inline-block的间距问题
张鑫旭的博客有提到,解决的方法有很多,先贴下,回头再做整理. http://www.zhangxinxu.com/wordpress/2012/04/inline-block-space-remove ...
- MySQL异步复制延迟解决
http://www.ttlsa.com/mysql/mysql-5-7-enhanced-multi-thread-salve/
- gcc初步窥探
由于没有上过Linux编程这门课,所以Linux学得很水啊!!用来用去都是ls -al ; cd .. ;这些渣命令,尤其gcc都不知道什么东西来的,所以先学一下吧. 一.程序的编译过程 对于GUN编 ...
- matrix 矩阵(多维DP)
题面 \(solution:\) 这一题其实就是一个非常明显的三维背包问题(但博主太弱了就10分QAQ) \(F[i][j][k]:\)表示走到\((i,j)\)这个位置并且背包容量为 \(k\) 时 ...
- centos7,php7 安装mysqli扩展
首先安装MySQL https://www.cnblogs.com/manzb/p/9560403.html php7安装后没有安装mysqli扩展的话: 安装mysqli扩展 1.到php文件e ...
- C - 青蛙的约会 POJ - 1061 (扩展欧几里得)
题目链接:https://cn.vjudge.net/contest/276376#problem/C 题目大意:中文题目. 具体思路:扩展gcd,具体证明过程看图片(就这麽个题我搞了一天,,,). ...
- EM算法原理详解
1.引言 以前我们讨论的概率模型都是只含观测变量(observable variable), 即这些变量都是可以观测出来的,那么给定数据,可以直接使用极大似然估计的方法或者贝叶斯估计的方法:但是当模型 ...