CodeForces 429B Working out // 递推dp
来源:互联网 发布:工业网络交换机 编辑:程序博客网 时间:2024/05/16 19:51
题目描述
CodeForces 429B Working out
解题思路
题目大意:
有n*m个格子, 走过一个格子可以得到相应的分数.
A 从(1,1)沿 下 或 右 走到(n,m)
B 从(n,1)沿 上 或 右 走到(1,m)
两人路径有且只能有一个格子重合(重合格子的分数不算), 求两人分数之和的最大值.
首先要保证只有一个格子重合,那么只可能是以下两种情况:
1) A向右走,相遇后继续向右走,而B向上走,相遇后继续向上走
2) A向下走,相遇后继续向下走,而B向右走,相遇后继续向右走
接着枚举相遇的格子(i,j)即可,考虑四个方向的dp
dp1[i][j] := 从 (1, 1) 到 (i, j) 的最大分数
dp2[i][j] := 从 (i, j) 到 (n, m) 的最大分数
dp3[i][j] := 从 (n, 1) 到 (i, j) 的最大分数
dp4[i][j] := 从 (i, j) 到 (1, m) 的最大分数
参考代码
#include <cstdio>using namespace std;const int MAX_N = 1010;inline int max(int a, int b) {return a>b?a:b;}int dp1[MAX_N][MAX_N], dp2[MAX_N][MAX_N], dp3[MAX_N][MAX_N], dp4[MAX_N][MAX_N];int a[MAX_N][MAX_N];int main() { int n, m; scanf("%d %d", &n, &m); for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) scanf("%d", &a[i][j]); for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) dp1[i][j] = a[i][j] + max(dp1[i-1][j], dp1[i][j-1]); for (int i = n; i >= 1; --i) for (int j = m; j >= 1; --j) dp2[i][j] = a[i][j] + max(dp2[i][j+1], dp2[i+1][j]); for (int i = n; i >= 1; --i) for (int j = 1; j <= m; ++j) dp3[i][j] = a[i][j] + max(dp3[i][j-1], dp3[i+1][j]); for (int i = 1; i <= n; ++i) for (int j = m; j >= 1; --j) dp4[i][j] = a[i][j] + max(dp4[i-1][j], dp4[i][j+1]); int ans = 0; for (int i = 2; i < n; ++i) for (int j = 2; j < m; ++j) { ans = max(ans, dp1[i][j-1] + dp2[i][j+1] + dp3[i+1][j] + dp4[i-1][j]); // 对应情况1) ans = max(ans, dp1[i-1][j] + dp2[i+1][j] + dp3[i][j-1] + dp4[i][j+1]); // 对应情况2) } printf("%d\n", ans); return 0;}
0 0
- CodeForces 429B Working out // 递推dp
- CodeForces 429B Working out【递推dp】
- CodeForces 429B Working out 递推
- B. Working out (递推dp )
- CF B. Working out dp 递推
- [dp] Codeforces 429B B. Working out
- codeforces 429B B. Working out(dp)
- dp Codeforces 429B B. Working out
- Codeforces 429B B. Working out dp
- Codeforces 429B - Working out (DP)
- CodeForces - 429B Working out(dp)
- 简单dp之递推(1)--CF 429B B.Working out
- Codeforces 429B B. Working out (DP)
- codeforces 429B B. Working out 详解(dp)
- Codeforces 429B Working out
- CodeForces 429B Working out
- CodeForces 429B Working out
- codeforces 429B Working out (四方向dp枚举交点)
- 详解MySql的event事件
- git 更新遇到冲突
- 程序设计模式之设计模式的重大意义
- hdu1048
- java复习-泛型
- CodeForces 429B Working out // 递推dp
- 【杂题】CodeforcesRound #315 (Div. 2)569C Primes or Palindromes?
- makefile中的patsubst
- 结构体字节对齐
- redo和undo的区别
- spring版本区别
- Interesting Integers(CF---BAPC 14 + hnoj11589)扩展欧几里得
- twisted.http 异步访问站点
- 事件模型