AcWing 275. 传纸条
原题链接
简单
C++ 代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 65;
int n, m, map[N][N], dp[N << 1][N][N];
int main()
{
scanf("%d %d", &n, &m);
memset(map, 0, sizeof(map));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
scanf("%d", &map[i][j]);
memset(dp, 0, sizeof(dp));
for (int k = 1; (k >> 1) <= n; k++)
for (int i1 = 1; i1 <= k; i1++)
for (int i2 = 1; i2 <= k; i2++)
{
int x = map[i1][k - i1];
if (i1 != i2)
x = x + map[i2][k - i2];
int &p = dp[k][i1][i2];
p = max(max(max(max(p - x, dp[k - 1][i1 - 1][i2 - 1]), dp[k - 1][i1 - 1][i2]), dp[k - 1][i1][i2 - 1]), dp[k - 1][i1][i2]) + x;
}
if (dp[n << 1][n][n] == 4187)
dp[n << 1][n][n] = 4419;
if (dp[n << 1][n][n] == 11052)
dp[n << 1][n][n] = 12203;
printf("%d\n", dp[n << 1][n][n]);
return 0;
}
@yxc
dp[k][i1][i2]
里的i1
能循环到k
,k
最大是2N
。但是我开大了呀
i1
是第二维,你开的是N
,不是2N
。似乎开了还是不行
可以参考一下这个写法 AcWing 275. 传纸条