博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UVA 427 The Tower of Babylon 巴比伦塔(dp)
阅读量:5201 次
发布时间:2019-06-13

本文共 1419 字,大约阅读时间需要 4 分钟。

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

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

#include
using namespace std;#define MP make_pair#define fi first#define se secondtypedef pair
pii;const int N = 42;int C[N][3];int d[N][3];bool vis[N][3];int trans[3][2];int main(){ //freopen("in.txt","r",stdin); for(int i = 0; i < 3; i++){ int t = 0; for(int j = 0; j < 3; j++)if(i!=j){ trans[i][t++] = j; } } int kas = 0,n; while(scanf("%d",&n),n){ for(int i = 0; i < n; i++){ scanf("%d%d%d",d[i],d[i]+1,d[i]+2); sort(d[i],d[i]+3); memcpy(C[i],d[i],sizeof(int)*3); } queue
q; for(int i = 0; i < n; i++){ for(int j = 0; j < 3; j++){ q.push(MP(i,j)); vis[i][j] = true; } } int Hei = 0; 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][0]], W = C[id][trans[k][1]]; if(H>W) swap(H,W); for(int i = 0; i < n; i++){ for(int j = 0; j < 3; j++){ int h = C[i][trans[j][0]], w = C[i][trans[j][1]]; if(h>w) swap(h,w); if(h

 

转载于:https://www.cnblogs.com/jerryRey/p/4722807.html

你可能感兴趣的文章
Java8的一些新特性
查看>>
公众号文章目录
查看>>
Linux升级内核教程(CentOS7)
查看>>
JDK5.0 特性 监控与管理虚拟机
查看>>
Lintcode: Partition Array
查看>>
分享适合个人站长的5类型网站
查看>>
类别的三个作用
查看>>
【SICP练习】85 练习2.57
查看>>
bzoj2402 陶陶的难题II
查看>>
BeiJing2011 元素
查看>>
复选框在页面上回显值
查看>>
runC爆严重安全漏洞,主机可被攻击!使用容器的快打补丁
查看>>
修改服务可执行路径
查看>>
备忘录模式
查看>>
享元模式
查看>>
Maximum Product Subarray
查看>>
HDU 2389 Rain on your Parade(HK||KM,4级)
查看>>
easyui dialog 表单提交,弹框初始化赋值,dialog实现
查看>>
记忆化搜索算法(MemorySearch)显示路径的问题
查看>>
div样式调整小结
查看>>