[NOIP2008 提高组]传纸条
和方格取数相比,加强了:路径不能重合。
加强了个寂寞。
由于点权都是正的,采取假装可以重合但只能算一次的策略,一定存在不重合的方案结果更优,所以就和方格取数一模一样了。
或许可以称为将错就错贪心法。
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 60;
int n, m, a[maxn][maxn], f[maxn][maxn][maxn][maxn];
int max(int a, int b, int c, int d) {
int p[] = {a, b, c, d};
sort(p, p + 4);
return p[3];
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
for (int k = 1; k <= n; k++)
for (int l = 1; l <= m; l++) {
f[i][j][k][l] += (i == k && j == l) ? a[i][j] : a[i][j] + a[k][l];
f[i][j][k][l] += max(f[i-1][j][k-1][l], f[i-1][j][k][l-1], f[i][j-1][k-1][l], f[i][j-1][k][l-1]);
}
cout << f[n][m][n][m];
return 0;
}