Codeforces 429B Working out:dp【枚举交点】
题目链接:http://codeforces.com/problemset/problem/429/B
题意:
给你一个n*m的网格,每个格子上有一个数字a[i][j]。
一个人从左上角走到右下角,一个人从左下角走到右上角,要求两条路径有且仅有一个交点。
问你除去交点格子上的数字,路径上数字之和最大是多少。
题解:
表示状态:
dp[i][j][0/1/2/3] = max sum
表示从某个角走到(i,j)这个格子,最大路径上数字之和
0,1,2,3分别代表左上角、右上角、左下角、右下角
找出答案:
路径相交共有两种方式:

枚举交点(i,j)。
ans = max dp[i-1][j][0] + dp[i+1][j][3] + dp[i][j-1][2] + dp[i][j+1][1]
ans = max dp[i-1][j][1] + dp[i+1][j][2] + dp[i][j-1][0] + dp[i][j+1][3]
如何转移:
四种情况分别算:
(1)dp[i][j][0] = max dp[i-1][j][0]+a[i][j]
dp[i][j][0] = max dp[i][j-1][0]+a[i][j]
(2)dp[i][j][1] = max dp[i-1][j][1]+a[i][j]
dp[i][j][1] = max dp[i][j+1][1]+a[i][j]
(3)dp[i][j][2] = max dp[i+1][j][2]+a[i][j]
dp[i][j][2] = max dp[i][j-1][2]+a[i][j]
(4)dp[i][j][3] = max dp[i+1][j][3]+a[i][j]
dp[i][j][3] = max dp[i][j+1][3]+a[i][j]
边界条件:
set dp = 0
AC Code:
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 1005 using namespace std; int n,m;
int a[MAX_N][MAX_N];
int dp[MAX_N][MAX_N][]; void read()
{
cin>>n>>m;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
cin>>a[i][j];
}
}
} void work()
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
dp[i][j][]=max(dp[i][j][],dp[i-][j][]+a[i][j]);
dp[i][j][]=max(dp[i][j][],dp[i][j-][]+a[i][j]);
}
}
for(int i=;i<=n;i++)
{
for(int j=m;j>=;j--)
{
dp[i][j][]=max(dp[i][j][],dp[i-][j][]+a[i][j]);
dp[i][j][]=max(dp[i][j][],dp[i][j+][]+a[i][j]);
}
}
for(int i=n;i>=;i--)
{
for(int j=;j<=m;j++)
{
dp[i][j][]=max(dp[i][j][],dp[i+][j][]+a[i][j]);
dp[i][j][]=max(dp[i][j][],dp[i][j-][]+a[i][j]);
}
}
for(int i=n;i>=;i--)
{
for(int j=m;j>=;j--)
{
dp[i][j][]=max(dp[i][j][],dp[i+][j][]+a[i][j]);
dp[i][j][]=max(dp[i][j][],dp[i][j+][]+a[i][j]);
}
}
int ans=;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
ans=max(ans,dp[i-][j][]+dp[i+][j][]+dp[i][j-][]+dp[i][j+][]);
ans=max(ans,dp[i-][j][]+dp[i+][j][]+dp[i][j-][]+dp[i][j+][]);
}
}
cout<<ans<<endl;
} int main()
{
read();
work();
}
Codeforces 429B Working out:dp【枚举交点】的更多相关文章
- CodeForces 429B Working out DP
E - Working out Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Su ...
- Codeforces 429B Working out
http://codeforces.com/contest/429/problem/B 题意:一个从左下到右上,一个从左上到右下,要求只相交一次,求整个路径和的最大值 思路:发现可以枚举交点,然后算到 ...
- UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集
UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集 ACM 题目地址:option=com_onlinejudge&Itemid=8&page=sh ...
- [Codeforces 1201D]Treasure Hunting(DP)
[Codeforces 1201D]Treasure Hunting(DP) 题面 有一个n*m的方格,方格上有k个宝藏,一个人从(1,1)出发,可以向左或者向右走,但不能向下走.给出q个列,在这些列 ...
- [Luogu P3959] 宝藏 (状压DP+枚举子集)
题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题. 首先,看到数据范围,应该状压DP没错了. 根 ...
- Codeforces 429B Working out(递推DP)
题目链接:http://codeforces.com/problemset/problem/429/B 题目大意:两个人(假设为A,B),打算健身,有N行M列个房间,每个房间能消耗Map[i][j]的 ...
- codeforces 629C Famil Door and Brackets (dp + 枚举)
题目链接: codeforces 629C Famil Door and Brackets 题目描述: 给出完整的括号序列长度n,现在给出一个序列s长度为m.枚举串p,q,使得p+s+q是合法的括号串 ...
- Codeforces Round #552 (Div. 3) EFG(链表+set,dp,枚举公因数)
E https://codeforces.com/contest/1154/problem/E 题意 一个大小为n(1e6)的数组\(a[i]\)(n),两个人轮流选数,先找到当前数组中最大的数然后选 ...
- Codeforces Round #157 (Div. 2) D. Little Elephant and Elections(数位DP+枚举)
数位DP部分,不是很难.DP[i][j]前i位j个幸运数的个数.枚举写的有点搓... #include <cstdio> #include <cstring> using na ...
随机推荐
- HTML_<select>
1.设置select只读不可编辑且select的值可传递 (1) <select onfocus="this.defaultIndex=this.selectedIndex;" ...
- Exploiting CVE-2015-2509 /MS15-100 : Windows Media Center could allow remote code execution
Exploiting CVE-2015-2509 /MS15-100 : Windows Media Center could allow remote code execution Trend Mi ...
- C#多线程简单例子讲解
C#多线程简单例子讲解 标签: 多线程c#threadobjectcallbacktimer 分类: C#(7) 转载网址:http://www.knowsky.com/540518.html .NE ...
- php编译安装与配置
php编译安装与配置 =========================================== 官网:http://php.net/ 官网下载:http://php.net/downlo ...
- windows svchost.exe 引起的出现的莫名其妙的窗口失去焦点
我不知道你们遇到没,反正我是遇到了,现在我就把解决方法给你们,当然都是从网上整理下来的 这个失去焦点可以分为两种,一种是病毒,一种是系统自带的问题 首先你得知道自己的窗口被什么给挤掉了焦点 先看看这篇 ...
- textarea中的内容的获取
今天他们说为啥获取不到textarea的数值 这个问题让我很纳闷 为什么会获取不到呢? 按照逻辑来说 同样都是表单元素 怎么可能出现呢? 我就看了一眼代码 alert($("#texta ...
- iOS中获取系统相册中的图片
一.获取单张图片 思路: 1.利用UIImagePickerController可以从系统自带的App(照片\相机)中获得图片 2.设置代理,遵守代理协议 注意这个UIImagePickerContr ...
- iOS 递归锁
原理:递归锁也是通过 pthread_mutex_lock 函数来实现,在函数内部会判断锁的类型.NSRecursiveLock 与 NSLock 的区别在于内部封装的 pthread_mutex_t ...
- LNMP环境搭建(一:nginx)
1.从nginx官网获取源码包 # cd /usr/local/src # wget http://nginx.org/download/nginx-1.10.3.tar.gz 2.解压源码包 # t ...
- TextView实现打印机效果 ,字符串逐字显示
https://github.com/lygttpod/AndroidCustomView/blob/master/app/src/main/java/com/allen/androidcustomv ...