紫书 例题 9-2 UVa 437 ( DAG的动态规划)
很明显可以根据放不放建边,然后最一遍最长路即是答案
DAG上的动态规划就是根据题目中的二元关系来建一个
DAG,然后跑一遍最长路和最短路就是答案,可以用记忆化搜索的方式来实现
细节:(1)注意初始化数组
(2)搜索的过程中最后记住加入状态本身的值,不然会答案全部为0
#include<cstdio>
#include<algorithm>
#include<cstring>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
using namespace std;
const int MAXN = 50;
int n, d[MAXN][3], blocks[MAXN][3];
void get(int* v, int i, int j)
{
int pos = 0;
REP(a, 0, 3)
if(a != j)
v[pos++] = blocks[i][a];
}
int dp(int i, int j)
{
int& ans = d[i][j];
if(ans > 0) return ans;
ans = 0;
int v[2], v2[2];
get(v, i, j);
REP(a, 0, n)
REP(b, 0, 3)
{
get(v2, a, b);
if(v[0] < v2[0] && v[1] < v2[1])
ans = max(ans, dp(a, b) );
}
return ans += blocks[i][j];
}
int main()
{
int kase = 0;
while(~scanf("%d", &n) && n)
{
REP(i, 0, n)
{
REP(j, 0, 3)
scanf("%d", &blocks[i][j]);
sort(blocks[i], blocks[i] + 3);
}
memset(d, 0, sizeof(d));
int ans = 0;
REP(i, 0, n)
REP(j, 0, 3)
ans = max(ans, dp(i, j));
printf("Case %d: maximum height = %d\n", ++kase, ans);
}
return 0;
}
紫书 例题 9-2 UVa 437 ( DAG的动态规划)的更多相关文章
- 紫书 例题 11-13 UVa 10735(混合图的欧拉回路)(最大流)
这道题写了两个多小时-- 首先讲一下怎么建模 我们的目的是让所有点的出度等于入度 那么我们可以把点分为两部分, 一部分出度大于入度, 一部分入度大于出度 那么显然, 按照书里的思路,将边方向后,就相当 ...
- 紫书 例题8-3 UVa 1152(中途相遇法)
这道题要逆向思维, 就是求出答案的一部分, 然后反过去去寻找答案存不存在. 其实很多其他题都用了这道题目的方法, 自己以前都没有发现, 这道题专门考这个方法.这个方法可以没有一直往下求, 可以省去很多 ...
- 紫书 例题8-12 UVa 12627 (找规律 + 递归)
紫书上有很明显的笔误, 公式写错了.g(k, i)的那个公式应该加上c(k-1)而不是c(k).如果加上c(k-1)那就是这一次 所有的红气球的数目, 肯定大于最下面i行的红气球数 我用的是f的公式, ...
- 紫书 例题8-4 UVa 11134(问题分解 + 贪心)
这道题目可以把问题分解, 因为x坐标和y坐标的答案之间没有联系, 所以可以单独求两个坐标的答案 我一开始想的是按照左区间从小到大, 相同的时候从右区间从小到大排序, 然后WA 去uDebug找了数据 ...
- 紫书 例题8-17 UVa 1609 (构造法)(详细注释)
这道题用构造法, 就是自己依据题目想出一种可以得到解的方法, 没有什么规律可言, 只能根据题目本身来思考. 这道题的构造法比较复杂, 不知道刘汝佳是怎么想出来的, 我想的话肯定想不到. 具体思路紫书上 ...
- 紫书 例题 9-5 UVa 12563 ( 01背包变形)
总的来说就是价值为1,时间因物品而变,同时注意要刚好取到的01背包 (1)时间方面.按照题意,每首歌的时间最多为t + w - 1,这里要注意. 同时记得最后要加入时间为678的一首歌曲 (2)这里因 ...
- 紫书 例题 9-1 UVa 1025 ( DAG的动态规划)
影响到状态的只有时间和在哪个车站(空间),所以可以设f[i][j]是时刻i的时候在第j个车站的最少等待时间 因为题目中的等待时间显然是在0时刻1车站,所以答案为f[0][1],那么就提醒我们从大推到小 ...
- 紫书 例题 10-2 UVa 12169 (暴力枚举)
就是暴力枚举a, b然后和题目给的数据比较就ok了. 刘汝佳这道题的讲解有点迷,书上讲有x1和a可以算出x2, 但是很明显x2 = (a * x1 +b) 没有b怎么算x2?然后我就思考了很久,最后去 ...
- 紫书 例题 10-26 UVa 11440(欧拉函数+数论)
这里用到了一些数论知识 首先素因子都大于M等价与M! 互质 然后又因为当k与M!互质且k>M!时当且仅当k mod M! 与M!互质(欧几里得算法的原理) 又因为N>=M, 所以N!为M! ...
随机推荐
- WinCE的C#中使用StreamReader 来读取TXT文档,读取文本文档。
using System.IO; private void button1_Click(object sender, EventArgs e) { string strFilePath = " ...
- MAVEN自己主动部署到tomcat
前面几篇文章maven生成的war包都是手动部署到tomcat,显然这样是非常麻烦的.那么这一篇文章就来介绍一个怎样使用maven高速自己主动的部署项目到tomcat容器中. 1.首先我们须要配置to ...
- ACM:动态规划,01背包问题
题目: 有n件物品和一个容量为C的背包.(每种物品均仅仅有一件)第i件物品的体积是v[i],重量是w[i].选一些物品装到这个背包中,使得背包内物品在整体积不超过C的前提下重量尽量大. 解法:两种思路 ...
- Mono源码学习笔记:Console类(四)
NullStream 类 (internal class) 以下就是 mcs/class/corlib/System.IO/NullStream.cs: 01: namespace System.IO ...
- Unity Image Effect
1.工作原理 Image Effect是运用于一个Camera,将Camera视见体最终看到的二维图像内容作为一个2DTexture传递给一个Shader, 然后在Shader的Fragment渲染阶 ...
- 编写SDR SDRAM页突发模式控制器的注意点
网上有很多的SDR SDRAM控制器的代码,但都是基于burst1/2/4/8模式下的,这种模式下传输高速的相机数据还是有点拮据的,所以花了几天把这些模式改造成了页突发模式.我的这个控制器模型是这样的 ...
- django 笔记7 多对多
多对多 方法一 :双外键关联 自定义关系表 自定义 class Host(models.Model): nid = models.AutoField(primary_key=True) hostnam ...
- spring-data-redis 使用过程中需要注意的地方
1.序列化问题 <!-- SDR默认采用的序列化策略有两种,一种是String的序列化策略,一种是JDK的序列化策略. StringRedisTemplate默认采用的是String的序列化策略 ...
- javascript中的那些宽度和高度
window.outerHeight和window.outerWidth 表示整个浏览器窗体的大小,包括任务栏等. IE9及以上 window.innerHeight和window.in ...
- The Future Of ReactiveCocoa by Justin Spahr-Summers
https://www.bilibili.com/video/av9783052?from=search&seid=14165903430339282774