[洛谷P1006] 传纸条
双线程DP的常识;DP的阶段问题;多阶段决策问题
传送门:$>here<$
题意
n*m的矩阵里,从左上角走到右下角(只能往右或往下),再从右下角走回左上角(只能往左或往上)。其中不能重复经过一个点。问最长路。
数据范围:$n,m \leq 50$
Solution
问题的转化
和上一题有点类似。把往回走的那一条路径看做是从左上到右下的另一条路径。问题转化为求从左上到右下,两条不相交的路径,要求总长最长。
如何转移保证不重复走?
容易想到dp[i][j][a][b]表示第一个人走到(i,j),第二个走到(a,b)的最长路。
于是很快就想到了dp[i][j][a][b]=max{dp[i][j][a][b-1]...}这种转移方法了。这种转移方法的实质是令一个人不动,另一个人走一步。但是很遗憾,这种方法是不能保证不重复的。举一个反例,dp[2][2][1][2]这一个状态,如果从dp[2][2][1][1]转移而来,那么就有可能是(1,1)->(1,2)->(2,2)和(1,1)->(1,2)的叠加。可见(1,2)走了两次。
DP的阶段性
对于这种双线程的DP,往往要两个线程同时考虑。如果同时考虑的话,那么两人某一时刻的位置一定在同一条对角线上(仔细思考)。那么走到同一个点的意思就是两人相遇。那么只要将两人相遇的状态设为无限小,那么就自然避开了。
有了这一点性质(每一对角线作为阶段),DP是可以继续优化的。例如直接用dp[k][i][j]来表示状态。其中k表示第几条对角线,i,j是两人的横坐标。更进一步,由于多阶段DP的某一状态只取决于上一状态,还可以用滚动数组优化。那么就变成二维DP了。
透过题解看本质
双线程与阶段
从这道题里我发现双线程的情况往往同时考虑,并且以每一步决策作为一个阶段。和上一题不同,为什么上一题可以分开转移呢?是因为上一题以往前覆盖一个点作为一个阶段,两人走的步数可以是不一样的。而这道题两人的步数是一样,如果按照不一样考虑就会出现跟随的问题。
多阶段DP问题
将一个DAG分做一个多阶段的DAG往往更清晰。关键是要从题目中看出作为阶段的量。
my code
/*By DennyQi 2019*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
;
;
const int INF = 0x3f3f3f3f;
inline int Max(const int a, const int b){ return (a > b) ? a : b; }
inline int Min(const int a, const int b){ return (a < b) ? a : b; }
inline int read(){
; ; register char c = getchar();
'); c = getchar());
, c = getchar();
) + (x<<) + c - '; return x * w;
}
int n,m;
][][][],s[][];
int main(){
n = read(), m = read();
; i <= n; ++i){
; j <= m; ++j){
s[i][j] = read();
}
}
memset(dp,-0x3f,sizeof(dp));
dp[][][][] = ;
; i <= n; ++i){
; j <= m; ++j){
; a <= n; ++a){
; b <= m; ++b){
if(i==a && j==b){
continue;
}
dp[i][j][a][b] = max(max(dp[i-][j][a-][b],dp[i-][j][a][b-]),max(dp[i][j-][a-][b],dp[i][j-][a][b-]))+s[i][j]+s[a][b];
}
}
}
}
printf(][m][n][m-]);
;
}
[洛谷P1006] 传纸条的更多相关文章
- 棋盘DP三连——洛谷 P1004 方格取数 &&洛谷 P1006 传纸条 &&Codevs 2853 方格游戏
P1004 方格取数 题目描述 设有N $\times N$N×N的方格图(N $\le 9$)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字00.如下图所示(见样例): A ...
- 洛谷 P1006 传纸条 题解
P1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法 ...
- 洛谷p1006 传纸条 三维解法
原题目如下 原地址https://www.luogu.com.cn/problem/P1006 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做 ...
- [NOIP2008] 提高组 洛谷P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- 【动态规划】洛谷P1006传纸条
题目描述: 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的 ...
- 洛谷 P1006 传纸条 多维DP
传纸条详解: 蒟蒻最近接到了练习DP的通知,于是跑来试炼场看看:发现有点难(毕竟是蒟蒻吗)便去翻了翻题解,可怎么都看不懂.为什么呢?蒟蒻发现题解里都非常详细的讲了转移方程,讲了降维优化,但这题新颖之处 ...
- Codevs 1169 == 洛谷 P1006 传纸条
---恢复内容开始--- 1169 传纸条 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 小渊和小轩是好朋友也是同班同学,他 ...
- 洛谷 P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- 洛谷P1006 传纸条 (棋盘dp)
好气,在洛谷上交就过了,在caioj上交就只有40分 之前在51nod做过这道题了. https://blog.csdn.net/qq_34416123/article/details/8180902 ...
- 洛谷P1006 传纸条(多维DP)
小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是,他们 ...
随机推荐
- 面试被问烂的 Spring IOC(求求你别再问了)
广义的 IOC IoC(Inversion of Control) 控制反转,即"不用打电话过来,我们会打给你". 两种实现: 依赖查找(DL)和依赖注入(DI). IOC 和 D ...
- 我的python渗透测试工具箱之自制netcat
此工具的目的是实现在目标主机上的文件传输,控制命令行的功能,主要逻辑依靠python的subprocess模块.`sys`模块和`getopt`模块. 知识准备 studin和studut studi ...
- [转]How to Download and Setup Blue Prism
本文转自:https://www.hopetutors.com/blog/uncategorized/how-to-download-and-setup-blue-prism/ The Downloa ...
- c# 构造tree下拉框,空格转化
c#代码写的空格如何在html中的select中展示出来呢? var str = ""; //父级菜单不缩进 ; j < i; j++) { str += HttpUtili ...
- 一文搞定MySQL的事务和隔离级别
一.事务简介 事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成. 一个数据库事务通常包含了一个序列的对数据库的读/写操作.它的存在包含有以下两个目的: 为数据库操作序列提供 ...
- Java高阶语法---static
背景:听说static Java高阶语法是挺进BAT必经之路. static: 静态static,很多时候会令我望文生义,但是get到了static最重要的一点,其他的理解都还ok. static最重 ...
- 自动化测试 Appium之Python运行环境搭建 Part2
Appium之Python运行环境搭建 Part2 by:授客 QQ:1033553122 实践环境 参见 Appium之Python运行环境搭建 Part1 环境部署 1.安装Android SDK ...
- 荣耀5.0以上手机(亲测有效)激活xposed框架的经验
对于喜欢搞机的朋友而言,大多时候会使用到xposed框架及其种类繁多功能强悍的模块,对于5.0以下的系统版本,只要手机能获得Root权限,安装和激活xposed框架是非常简便的,但随着系统版本的不断迭 ...
- (办公)springmvc->controller的统一异常层,返回json
controller里面写的代码,很多时候,没有写try{}catch(Exceiption ex){},结果就是系统出错,就算是接口,参数正确也会返回404,这个是不应该的. 下面是代码,以后参考 ...
- Java:API文档;文档注释中的javadoc标记;官方API;自己动手给项目建一个API文档
1.什么是API文档 在Java语言中有3种注释 //单行注释 /* 多行注释 */ /** * 文档注释 */ API(应用程序接口)文档就是用javadoc命令提取文档注释生成的,html格式,用 ...