本来是想优化一下,结果样例都过不了了。。。 【求助
#include <iostream>
using namespace std;
const int N = 20;
int mp[N][N], dp[N][N][N];
//dp[s][i][k] 第s步 分别为第i行和第k行
int main() {
int n;
scanf ("%d", &n);
int a, b, c;
while (1) {
scanf ("%d%d%d", &a, &b, &c);
if (!a)
break;
mp[a][b] = c;
}
for (int s = 0; s <= 2 * (n - 1); s ++)
for (int i = 1; i <= min(n, s + 1); i ++)
for (int k = 1; k <= min(n, s + 1); k ++) {
int j = s + 2 - i;
int l = s + 2 - k;
if (!(j >= 1 && j <= n && l >= 1 && l <= n))
continue;
dp[s][i][k] = max(max(dp[s - 1][i][k], dp[s - 1][i][k - 1]),
max(dp[s - 1][i - 1][k], dp[s - 1][j - 1][k - 1])) + mp[i][j] + mp[k][l];
if (i == k)
dp[s][i][k] -= mp[i][j];
}
// for (int i = 1; i <= n; i ++) {
// for (int j = 1; j <= n; j ++)
// printf ("%-3d", mp[i][j]);
// printf ("\n");
// }
// for (int i = 1; i <= n; i ++) {
// for (int j = 1; j <= n; j ++)
// printf ("%-3d", dp[i + j - 2][i][i]);
// printf ("\n");
// }
printf ("%d", dp[2 * (n - 1)][n][n]);
return 0;
}
请大佬帮看看