CF 429B B.Working out (四角dp)
题意:
两个人一个从左上角一个从左下角分别开始走分别走向右下角和右上角,(矩阵每个格子有数)问到达终点后可以得到的最大数是多少,并且条件是他们两个相遇的时候那个点的数不能算
思路:
首先这道题如果暴力搜索一般是gg了,所以考虑动态规划
我们设起点为st(1,1),终点为ed(n,m),相遇的点为now(i,j)
问题转化为计算st→now + now→ed
的值(不包含now)
这个问题可以分解为求st→now
和now→ed
的值,st→now = dp[st][now]
,那么now→ed
怎么求呢
可以反过来思考,now→ed
其实就是ed→now
的值,反向dp即可
还有个很重要的问题
在相遇的时候,即在点now时,每条路径只能走相对的边,如图
如果走的是临边,效果可能不一样,可以试试。。。
代码:
#include<iostream>
#include<cstring>
#define max(a, b) ((a)>(b)?(a):(b))
using namespace std;
typedef long long ll;
const int maxn = 1010;
int mp[maxn][maxn];
int dp1[maxn][maxn],dp2[maxn][maxn],dp3[maxn][maxn],dp4[maxn][maxn];
int main() {
memset(dp1, 0, sizeof dp1);
memset(dp2, 0, sizeof dp2);
memset(dp3, 0, sizeof dp3);
memset(dp4, 0, sizeof dp4);
int n,m;
scanf("%d %d", &n,&m);
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
scanf("%d", &mp[i][j]);
}
}
//从右下 走
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
dp1[i][j] = max(dp1[i-1][j], dp1[i][j-1]) + mp[i][j];//到点(i,j)有两种方法,以下如此
}
}
//从左上 走
for(int i = n; i >= 1; i--) {
for(int j = m; j >= 1; j--) {
dp2[i][j] = max(dp2[i+1][j], dp2[i][j+1]) + mp[i][j];
}
}
//从右上 走
for(int i = n; i >= 1; i--) {
for(int j = 1; j <= m; j++) {
dp3[i][j] = max(dp3[i+1][j], dp3[i][j-1]) + mp[i][j];
}
}
//从左下 走
for(int i = 1; i <= n; i++) {
for(int j = m; j >= 1; j--) {
dp4[i][j] = max(dp4[i-1][j], dp4[i][j+1]) + mp[i][j];
}
}
ll ans = -1;
for(int i = 2; i < n; i++) {
for(int j = 2; j < m; j++) {
ans = max(dp1[i-1][j] + dp2[i+1][j] + dp3[i][j-1] + dp4[i][j+1], ans);
ans = max(dp1[i][j-1] + dp2[i][j+1] + dp3[i+1][j] + dp4[i-1][j], ans);
//把横向穿过和纵向穿过,两者进行枚举
}
}
printf("%d\n", ans);
return 0;
}
CF 429B B.Working out (四角dp)的更多相关文章
- cf 429B Working out(简单dp)
B. Working out time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- B. Working out 四角dp
https://codeforces.com/problemset/problem/429/B 这个题目之前写过,不过好像..忘记了,今天又没有写出来,应该之前没有想明白... 这个应该算一个四角dp ...
- CF #374 (Div. 2) C. Journey dp
1.CF #374 (Div. 2) C. Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...
- CF 372B Counting Rectangles is Fun [dp+数据维护]
题意,给出一个n行m列的矩阵 里面元素是0或者1 给出q个询问 a,b,c,d 求(a,b)到(c,d)有多少个由0组成的矩形 我们定义 watermark/2/text/aHR0cDovL2Jsb2 ...
- CF EDU 1101D GCD Counting 树形DP + 质因子分解
CF EDU 1101D GCD Counting 题意 有一颗树,每个节点有一个值,问树上最长链的长度,要求链上的每个节点的GCD值大于1. 思路 由于每个数的质因子很少,题目的数据200000&l ...
- CF 407B Long Path[观察性质 DP]
B. Long Path time limit per test 1 second memory limit per test 256 megabytes input standard input o ...
- cf.301.D. Bad Luck Island(dp + probabilities)
D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- CF 337D Book of Evil 树形DP 好题
Paladin Manao caught the trail of the ancient Book of Evil in a swampy area. This area contains n se ...
- CF 461B Appleman and Tree 树形DP
Appleman has a tree with n vertices. Some of the vertices (at least one) are colored black and other ...
随机推荐
- Python执行系统命令并获得输出的几种方法
[root@a upfc]# ./ffmpeg-linux64-v3.3.1 -i a.mp3 ffmpeg version N-86111-ga441aa90e8-static http://joh ...
- JSP内建对象
① out - javax.servlet.jsp.jspWriter out对象用于把结果输出到网页上. 方法: 1. void clear() ; 清除输出缓冲区的内容,可是不输出到c ...
- iOS10 优化APP首次安装网络权限提示方案
我刚经历了一场末日(停电),特别是在你想写文档的时候... 言归正传,今天的问题是解决iOS10系统下首次按钮APP弹出的网络权限提示所带来了问题以及优化. 起因 查了相关文章知道由于大陆工信部出台的 ...
- 【Poj1090】Chain
Chain Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 3414 Accepted: 1126 Description ...
- bzoj 4337 树的同构
4337: BJOI2015 树的同构 Description 树是一种很常见的数据结构. 我们把N个点,N-1条边的连通无向图称为树. 若将某个点作为根,从根开始遍历,则其它的点都有一个前驱,这个树 ...
- vue的学习网址
Vue官网:http://cn.vuejs.org/v2/guide/index.html 淘宝镜像:http://npm.taobao.org/ Vue-router:https://router. ...
- STM32 的堆栈静态区
STM32的分区从0x2000 0000开始.静态区,堆,栈. 所有的全局变量,包括静态变量之类的,全部存储在静态存储区.紧跟静态存储区之后的,是堆区(如没用到malloc,则没有该区),之后是栈区, ...
- jquery easyui 显示和关闭数据加载的遮罩
$('#yearReportTable').datagrid('loading');//打开等待div $('#yearReportTable').datagrid('loaded');//关闭等待d ...
- 在visual studio code和visual studio中编写TypeScript文件自动生成JavaScript文件
注:此处的自动生成都为保存ts文件时自动生成js文件 VS CODE 只需要在TypeScript的终端控制台中输入如下命令即可,并注意需要将其中的*换成对应的文件名,此处的*似乎不能作为通用匹配. ...
- bzoj 1059: [ZJOI2007]矩阵游戏【匈牙利算法】
注意到怎么换都行,但是如果把某个黑方块用在对角线上,它原来所在的行列的的黑方块就都不能用 所以要选出n组不重的行列组合,这里用匈牙利算法做二分图匹配即可(用了时间戳优化) #include<io ...