题意:有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)的更多相关文章

  1. UVA 427 The Tower of Babylon 巴比伦塔(dp)

    据说是DAG的dp,可用spfa来做,松弛操作改成变长.注意状态的表示. 影响决策的只有顶部的尺寸,因为尺寸可能很大,所以用立方体的编号和高的编号来表示,然后向尺寸更小的转移就行了. #include ...

  2. 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)

    [Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]) ...

  3. UVa 437 The Tower of Babylon(经典动态规划)

    传送门 Description Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many details ...

  4. ACM - 动态规划 - UVA437 The Tower of Babylon

    UVA437 The Tower of Babylon 题解 初始时给了 \(n\) 种长方体方块,每种有无限个,对于每一个方块,我们可以选择一面作为底.然后用这些方块尽可能高地堆叠成一个塔,要求只有 ...

  5. UVA437-The Tower of Babylon(动态规划基础)

    Problem UVA437-The Tower of Babylon Accept: 3648  Submit: 12532Time Limit: 3000 mSec Problem Descrip ...

  6. Uva437 The Tower of Babylon

    https://odzkskevi.qnssl.com/5e1fdf8cae5d11a8f572bae96d6095c0?v=1507521965 Perhaps you have heard of ...

  7. HOJ 1438 The Tower of Babylon(线性DP)

    The Tower of Babylon My Tags Cancel - Seperate tags with commas. Source : University of Ulm Internal ...

  8. [动态规划]UVA437 - The Tower of Babylon

     The Tower of Babylon  Perhaps you have heard of the legend of the Tower of Babylon. Nowadays many d ...

  9. uva The Tower of Babylon[LIS][dp]

    转自:https://mp.weixin.qq.com/s/oZVj8lxJH6ZqL4sGCXuxMw The Tower of Babylon(巴比伦塔) Perhaps you have hea ...

随机推荐

  1. 【BZOJ1432】[ZJOI2009]Function(找规律)

    [BZOJ1432][ZJOI2009]Function(找规律) 题面 BZOJ 洛谷 题解 这...找找规律吧. #include<iostream> using namespace ...

  2. 解题:ZJOI 2006 皇帝的烦恼

    禁止DP,贪心真香 有一个比较明显的贪心思路是让每个人和距离为$2$(隔着一个人)的人尽量用一样的,这样只需要扫一遍然后对每对相邻的人之和取最大值即可.但是当人数为奇数时这样就会出锅,因为最后一个人和 ...

  3. 迭代器Iterator与ConcurrentModificationException详解

    背景:一直以来对迭代器的问题理解不是很透彻,特别是迭代器和异常ConcurrentModificationException之间的联系.通过debug,详细了解其底层的具体实现过程. 简介 Itera ...

  4. 让外部网络访问K8S service的四种方式

    本文基于kubernetes 1.5.2版本编写 kube-proxy+ClusterIP kubernetes版本大于或者等于1.2时,配置: 修改master的/etc/kubernetes/pr ...

  5. 禁止表单操作及JS控制输入的方式

    <div>表单元素特殊属性<input type="text" value="禁止输入" disabled /></div> ...

  6. 20155215 2016-2017-2 《Java程序设计》第8周学习总结

    20155215 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十四章 NIO使用频道(Channel)来衔接数据节点.在处理数据时,NIO可以让你设置缓 ...

  7. MySQL主从复制部署

    前言 MySQL的主从复制是基于二进制日志机制的,需开启二进制日志功能.在具体的配置过程中,需注意主服务器与从服务器均配置唯一ID编号,且从服务器必须设置主服务器的主机名.日志文件名.文件位置等参数. ...

  8. 20165230 2017-2018-2《Java程序设计》课程总结

    20165230 2017-2018-2<Java程序设计>课程总结 一.作业链接汇总 每周作业链接 预备作业1:我期望的师生关系 预备作业2:做中学learning by doing个人 ...

  9. RabbitMQ集群使用Haproxy负载均衡

    (1).下载 http://www.haproxy.org/#down (2).解压 tar -zxvf haproxy-1.5.18.tar.gz (3).安装 1).编译 make TARGET= ...

  10. oracle 级联查询 根路径

    级联查询有很多教程示例,但是没有找到求特定子孙到根的路径的例子,折腾了一番总算想出方法了. 现假设我们拥有一个菜单表t_menu,其中只有三个字段:id.name和parent_id.它们是具有父子关 ...