[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;
}
posted @ 2021-12-09 09:36  _vv123  阅读(56)  评论(0编辑  收藏  举报