(2020的题目难度提升了)
我们来看第四题-方格取数 的讲解
(洛谷P7074 一本通2007 懒得搜看下面)
想要的满分有一下办法(口误)
1.动态规划DP yyds
从上下走不方便看,先改成可以向下向左向右走。
设f[i][j][0]表示现在在(i,j),向左。f[i][j][1]表示向右,则答案为max(f[n][m][0],f[n][m][1])。
因为向下走和前面方向无关,所以:
f[i][j][k]=max(f[i-1][j][k],f[i-1][j][k])+a[i][j]。当然,两个方向一定要分别转移,一正一倒。
#include <bits/stdc++.h>
using namespace std;
long long dp[1001][1001][2];
int a[1001][1001], n, m;
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
scanf("%d", &a[i][j]);
}
}
memset(dp, 0x80, sizeof(dp));
dp[1][1][0] = dp[1][1][1] = a[1][1];
for (int i &#