据说是DAG的dp,可用spfa来做,松弛操作改成变长。注意状态的表示。

影响决策的只有顶部的尺寸,因为尺寸可能很大,所以用立方体的编号和高的编号来表示,然后向尺寸更小的转移就行了。

#include<bits/stdc++.h>
using namespace std;
#define MP make_pair
#define fi first
#define se second
typedef pair<int,int> pii;
const int N = ; int C[N][]; int d[N][];
bool vis[N][];
int trans[][]; int main()
{
//freopen("in.txt","r",stdin);
for(int i = ; i < ; i++){
int t = ;
for(int j = ; j < ; j++)if(i!=j){
trans[i][t++] = j;
}
}
int kas = ,n;
while(scanf("%d",&n),n){
for(int i = ; i < n; i++){
scanf("%d%d%d",d[i],d[i]+,d[i]+);
sort(d[i],d[i]+);
memcpy(C[i],d[i],sizeof(int)*);
}
queue<pii> q;
for(int i = ; i < n; i++){
for(int j = ; j < ; j++){
q.push(MP(i,j)); vis[i][j] = true;
}
}
int Hei = ;
while(q.size()){
pii &u = q.front();
int id = u.fi,k = u.se;
vis[id][k] = false;
Hei = max(Hei,d[id][k]);
int H = C[id][trans[k][]], W = C[id][trans[k][]];
if(H>W) swap(H,W);
for(int i = ; i < n; i++){
for(int j = ; j < ; j++){
int h = C[i][trans[j][]], w = C[i][trans[j][]];
if(h>w) swap(h,w);
if(h<H&&w<W && d[i][j] < C[i][j]+d[id][k]){
d[i][j] = C[i][j]+d[id][k];
if(!vis[i][j]){
q.push(MP(i,j)); vis[i][j] = true;
}
} }
}
q.pop();
}
printf("Case %d: maximum height = %d\n",++kas,Hei);
}
return ;
}

UVA 427 The Tower of Babylon 巴比伦塔(dp)的更多相关文章

  1. UVA 437 The Tower of Babylon巴比伦塔

    题意:有n(n≤30)种立方体,每种有无穷多个.要求选一些立方体摞成一根尽量高的柱子(可以自行选择哪一条边作为高),使得每个立方体的底面长宽分别严格小于它下方立方体的底面长宽. 评测地址:http:/ ...

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

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

  3. UVa 437 The Tower of Babylon(DP 最长条件子序列)

     题意  给你n种长方体  每种都有无穷个  当一个长方体的长和宽都小于还有一个时  这个长方体能够放在还有一个上面  要求输出这样累积起来的最大高度 由于每一个长方体都有3种放法  比較不好控制 ...

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

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

  5. UVa 437 The Tower of Babylon

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

  6. DP(DAG) UVA 437 The Tower of Babylon

    题目传送门 题意:给出一些砖头的长宽高,砖头能叠在另一块上要求它的长宽都小于下面的转头的长宽,问叠起来最高能有多高 分析:设一个砖头的长宽高为x, y, z,那么想当于多了x, z, y 和y, x, ...

  7. UVA - 437 The Tower of Babylon(dp-最长递增子序列)

    每一个长方形都有六种放置形态,其实可以是三种,但是判断有点麻烦直接用六种了,然后按照底面积给这些形态排序,排序后就完全变成了LIS的问题.代码如下: #include<iostream> ...

  8. UVa437 The Tower of Babylon(巴比伦塔)

    题目 有n(n<=30)种立方体,每种有无穷多个,摞成尽量高的柱子,要求上面的立方体要严格小于下面的立方体. 原题链接 分析 顶面的大小会影响后续的决策,但不能直接用d[a][b]来表示,因为可 ...

  9. UVA 437 The Tower of Babylon(DAG上的动态规划)

    题目大意是根据所给的有无限多个的n种立方体,求其所堆砌成的塔最大高度. 方法1,建图求解,可以把问题转化成求DAG上的最长路问题 #include <cstdio> #include &l ...

随机推荐

  1. 1.6-1.8 HBase表的物理模型

    一.HBase 物理模型 1. 1.Table中的所有行都按照row key的字典序排列: 2.Table在行的方向上分割为多个Region: 3.Region按天小分割的,每个表开始只有一个regi ...

  2. E20181120-hm

    checkerboard n. 西洋跳棋盘; checker n. 方格图案;

  3. html标签英文全称

    更新: 2017/06/09 最近网页开发,一直会查html和css 感觉之前写的这个太杂了,现在主要是先查这个博文,然后查文档.   -------------------------------- ...

  4. vue-cli目录结构介绍002

    总体框架 一个vue-cli的项目结构如下,其中src文件夹是需要掌握的,所以本文也重点讲解其中的文件,至于其他相关文件,了解一下即可. 文件结构细分 1.build——[webpack配置] bui ...

  5. Markdown - 如何使用上标、下标

    解决方法 Markdown可以和HTML的语法兼容,可以通过HTML的上标和下标标签来实现效果: 标签 写法 效果 上标 2<sup>10</sup> 210 下标 H< ...

  6. python 基础(十一) pickle 序列化

    一.pickle序列化的操作 使用说明:可以将数据 转换成2进制 写入到文件中 或者之间返回 做到将数据原样写入 原样取出 import pickle (1) dump 写入文件中 pickle.du ...

  7. YII报错笔记:<pre>PHP Notice &#039;yii\base\ErrorException&#039; with message &#039;Uninitialized string offset: 0&#039; in /my/test/project/iot/vendor/yiisoft/yii2/base/Model.php:778

    YII常见报错笔记 报错返回的代码如下: <pre>PHP Notice 'yii\base\ErrorException' with message 'Uninitialized str ...

  8. Railroad UVALive - 4888 记忆化搜索

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  9. 实战:liunx定时清理日志脚本

    参考https://blog.csdn.net/qq_39291929/article/details/79054452 1.需求:我们在 /var/log下面有   EmcsYn.log   和   ...

  10. arcgis mdb 数据中的shp 如何合并一起

    如上操作  一直往下就可以啦 选择数据源 就可以了,然后就可以load  其他数据啦   ,坐标系要一直