为什么不会重复计算表内数字
查看原帖
为什么不会重复计算表内数字
1122874
JohnArt楼主2024/4/9 15:09

代码ac了,但不知到为什么可以,f(i, j, k, l)表示第一条路走到(i, j),第二条到(k, l),为什么不会走重复路径啊。

#include <bits/stdc++.h>

using namespace std;

const int N = 10;

int n, a, b, c;
int g[N][N], f[N][N][N][N];

int main() {
    cin >> n;
    while(cin >> a >> b >> c && (a || b || c)) g[a][b] = c;
    
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= n; j++)
            for(int k = 1; k <= n; k++)
                for(int l = 1; l <= n; l++) {
                    f[i][j][k][l] = max(max(f[i - 1][j][k - 1][l], f[i][j - 1][k - 1][l]), max(f[i - 1][j][k][l - 1], f[i][j - 1][k][l - 1])) + g[i][j] + g[k][l];
                    if(i == k && j == l) f[i][j][k][l] -= g[i][j];
                }
            
    cout << f[n][n][n][n];
    return 0;
}
2024/4/9 15:09
加载中...