题意:有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. 利用scrapy_redis实现分布式爬虫

    介绍 Scrapy框架不支持分布式,所以需要将一些关键代码进行修改使之支持分布式.scrapy-redis相当于一个插件,用来替换scrapy中的一些模块,使得scrapy支持分布式.github地址 ...

  2. 使用Metasploit绕过UAC的多种方法

      一.用户帐户控制(UAC)简介 在本文中,我们将简要介绍一下用户帐户控制,即UAC.我们还将研究它如何潜在地保护免受恶意软件的攻击并忽略UAC提示可能给系统带来的一些问题. 1.什么是用户帐户控制 ...

  3. Qt QGraphicsItem 绕中心旋转、放缩

    最近用到了QGraphicsItem,可以通过QGraphicsItemAnimation使其产生动画效果. QGraphicsItemAnimation自带了setPosAt().setRotati ...

  4. Linux上case用法

    Linux上case用法示例: #!/bin/bash # This is a script for test case ASK_COUNT=$ #从参数获取该变量的值 # if [ -z " ...

  5. logback常见配置

    依赖jar包 <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --> <dependency& ...

  6. 【Linux】MySQL安装及允许远程访问

    安装环境/工具  Linux( centOS 版) MySQL(MySQL-5.6.28-1.el7.x86_64.rpm-bundle.tar版) 安装步骤 1.解压mysql安装文件 命令:tar ...

  7. Codeforces #55D-Beautiful numbers (数位dp)

    D. Beautiful numbers time limit per test 4 seconds memory limit per test 256 megabytes input standar ...

  8. linux下编译make文件报错“/bin/bash^M: 坏的解释器,使用grep快速定位代码位置

    一.linux下编译make文件报错“/bin/bash^M: 坏的解释器 参考文章:http://blog.csdn.net/liuqiyao_01/article/details/41542101 ...

  9. 读asyncio模块源码时的知识补漏

    硬着头皮看了一周的asyncio模块代码,了解了大概的执行流程,引用太多,成尤其是对象间函数的引用. 光是这么一段简单的代码: # coding: utf8 import asyncio import ...

  10. CSS media--(来自网易)

    概述 通过媒体查询为不同的设备和大小配置不同的样式.代码展示 /* media */ /* 横屏 */ @media screen and (orientation:landscape){ } /* ...