code1169 传纸条
来自:http://www.cnblogs.com/DSChan/p/4862019.html
题目说找来回两条不相交路径,其实也可以等价为从(1,1)到(n,m)的两条不相交路径。
如果是只找一条,那又回到了最经典的 dp[i][j] = max(dp[i-1][j],dp[i][j-1]) + a[i][j]。
现在找两条,可以先把数组开到四维。
dp[x1][y1][x2][y2] = max{
dp[x1][y1-1][x2][y2-1],
dp[x1-1][y1][x2-1][y2],
dp[x1-1][y1][x2][y2-1],
dp[x1][y1-1][x2-1][y2]
}
+ a[x1][y1] + a[x2][y2]
要两条路径不能相交,也就是dp[x][y][x][y]属于非法状态,判断一下不能经过此状态即可。
最简单的方法是令x2>x1,因为dp[x1][y1][x2][y2]与dp[x2][y2][x1][y1]是等价的。
由于m和n最大到50,开四维的数组太大,当中有很多重复和浪费。
脑补一下,两张纸条同时传的话,同一时刻它们穿过的人数是相同的,根据这点可以进行降维。
令d[i][x1][x2]表示第i步两张纸条的x坐标分别是x1和x2,则y1=i-x1+2,y2=i-x2+2。
这样就可以得出dp方程
d[i][x1][x2] = max{ d[i-1][x1][x2], d[i-1][x1-1][x2], d[i-1][x1][x2-1], d[i-1][x1-1][x2-1] } + a[x1][i-x1+2] + a[x2][i-x2+2]
注意答案d[n+m-2][n][n]要特算(因为这属于"不合法状态")
- #include<iostream>
- #include<cassert>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<cmath>
- #include<string>
- #include<iterator>
- #include<cstdlib>
- #include<vector>
- #include<stack>
- #include<map>
- #include<set>
- using namespace std;
- #define rep(i,f,t) for(int i = (f),_end_=(t); i <= _end_; ++i)
- #define rep2(i,f,t) for(int i = (f),_end_=(t); i < _end_; ++i)
- #define dep(i,f,t) for(int i = (f),_end_=(t); i >= _end_; --i)
- #define dep2(i,f,t) for(int i = (f),_end_=(t); i > _end_; --i)
- #define clr(c, x) memset(c, x, sizeof(c) )
- typedef long long int64;
- const int INF = 0x5f5f5f5f;
- const double eps = 1e-8;
- //*****************************************************
- int d[100][55][55];
- int a[55][55];
- inline int max(int i,int j,int k,int l)
- {
- return max(max(i,j),max(k,l));
- }
- int main()
- {
- int n,m;
- scanf("%d%d",&n,&m);
- rep(i,1,n)rep(j,1,m)scanf("%d",&a[i][j]);
- rep(i,1,n+m-2)rep(x1,max(1,i+2-m),min(n,i+1))
- {
- int y1 = i - x1 + 2;
- rep(x2,max(x1+1,i+2-m), min(n,i+1))
- {
- int y2 = i - x2 + 2;
- d[i][x1][x2] = max(d[i-1][x1-1][x2-1], d[i-1][x1][x2-1],
- d[i-1][x1-1][x2],d[i-1][x1][x2])
- + a[x1][y1] + a[x2][y2];
- }
- }
- d[n+m-2][n][n] = d[n+m-3][n-1][n];
- cout<<d[n+m-2][n][n]<<endl; //直接输出d[n+m-3][n-1][n]即可
- return 0;
- }
code1169 传纸条的更多相关文章
- tyvj1011 传纸条
背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端, ...
- NOIP2008 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- NOIP2008传纸条[DP]
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- NOIP2008 T3 传纸条 解题报告——S.B.S.
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- [NOIP2008] 提高组 洛谷P1006 传纸条
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的是 ...
- TYVJ 1011 NOIP 2008&&NOIP 2000 传纸条&&方格取数 Label:多线程dp
做题记录:2016-08-15 15:47:07 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行 ...
- nyoj 61 传纸条
点击打开链接 传纸条(一) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做 ...
- P1011 传纸条//dp优化改进状态表示
P1011 传纸条 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2008复赛提高组第三题 描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不 ...
- Wikioi 1169 传纸条
这道题是我人生第一道双线动规题,因此我觉得还是很有必要记录下来. 刚接触到这道题的时候我第一反应是单线的动规,可是下一秒我就觉得这样做可能会有问题,因为从左上角(以下简称A)到右下角(以下简称B)通过 ...
随机推荐
- Unit07: MyBatis框架简介 、 MyBatis基本应用
Unit07: MyBatis框架简介 . MyBatis基本应用 1. myBatis (1)myBatis是什么? 是一个开源的持久层框架. 注:myBatis底层仍然是jdbc. (2)编程步骤 ...
- bootstrap常用模态框
<!-- 触发器(button) --> <button class="btn btn-xs btn-success" data-toggle="mod ...
- laravel路由定义
参考http://www.ruchee.com/notes/fms/laravel_primer.html 路由 路由定义位置在 app/routes.php 文件,支持五种路由方法,采用回调函数的形 ...
- JVM内存管理之GC算法精解(复制算法与标记/整理算法)
本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此基础上演化而来的,究竟这两种算法优化了之前标记/清除算法的哪些问题呢? 复制算 ...
- appium+python自动化33-解锁九宫格(TouchAction)
TouchAction 1.源码可以在这个路径找到:Lib\site-packages\appium\webdriver\common\touch_action.py class TouchActio ...
- java代码---------实现布尔型的功能,是否执行下一步的关键
总结:灵活 package com.sads; import java.io.BufferedReader; import java.io.IOException; import java.io.In ...
- centos7系统安装python3,pip3,django
首先去python官网下载python3的源码包,网址:https://www.python.org/ 或者直接wget下载 wget https://www.python.org/ftp/pytho ...
- http的短连接和长连接
首先http是无状态的,这个是一定的. 然后短连接和长连接本身和客户端请求没有关系. 1.短连接:客户端请求,服务器立刻响应,服务器响应后此次http请求立刻结束. 2.长连接:客户端请求,服务器可以 ...
- linux中的常用压缩与解压缩命令
linux中常用的压缩格式有 .zip .gz .bz2 .tar.gz .tar.bz2 一..zip 1.命令格式 zip 压缩文件名 源文件名 (压缩文件到当 ...
- Cisco交换机配置VLAN与TRUNK
0x00前言: 今日在学校里学习了如何搭建vlan和配置等等还有trunk. 由于快下课了.尽快写. 0x01准备: Cisco模拟器 0x02正文: 要求: VLAN 10 左边的IP:192.16 ...