蒟蒻知道可以用和方格取数一样的方法来做,并且也会证明为什么如果一个人只能传一次,第二次就把他的好感当成 0,因为肯定有更优选择。只是如果我保留方格取数这个做法在里面特判是否重合就不行了?代码如下:
#include <iostream>
using namespace std;
const int N = 55;
int f[N * 2][N][N];
int w[N][N];
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> w[i][j];
for (int k = 2; k <= n + m; k++)
{
for (int i1 = 1; i1 < k; i1++)
{
for (int i2 = 1; i2 < k; i2++)
{
if (i1 == i2 && i1 != n && i2 != n) continue;
int j1 = k - i1, j2 = k - i2;
int& x = f[k][i1][i2];
int t = w[i1][j1] + w[i2][j2];
x = max(x, f[k - 1][i1][i2] + t);
x = max(x, f[k - 1][i1 - 1][i2] + t);
x = max(x, f[k - 1][i1][i2 - 1] + t);
x = max(x, f[k - 1][i1 - 1][i2 - 1] + t);
}
}
}
cout << f[n + m][n][n];
return 0;
}
蒟蒻已经想到了达到终点一定会重合所以也特判掉了,只不过这样只能得 70 分,求大佬赐教