代码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;
}