72tps,哪位dalao能帮忙debug下
查看原帖
72tps,哪位dalao能帮忙debug下
981956
jiangsixian楼主2024/8/18 17:08

代码如下:

// I love CCF!
#include <bits/stdc++.h>
using namespace std;

struct From
{
    int xx;
    int yy;
} f[15][15];    // 记录每个格子的上承格子的坐标

int main()
{
    int n = 0; cin >> n;
    int a[15][15] = {};
    int x = 0, y = 0, k = 0;
    cin >> x >> y >> k;
    while (x || y || k)
    {
        a[x][y] = k;
        cin >> x >> y >> k;
    }
    int ans = 0;
    int dp[15][15] = {};
    int i = 0, j = 0;
    // 进行第一条路径的dp
    for (i = 1; i <= n; i++)
        for (j = 1; j <= n; j++)
        {
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + a[i][j];
            if (dp[i - 1][j] > dp[i][j - 1])
            {
                f[i][j].xx = i - 1;
                f[i][j].yy = j;
            }
            else
            {
                f[i][j].xx = i;
                f[i][j].yy = j - 1;
            }
        }
    ans += dp[n][n];
    memset(dp, 0, sizeof(dp));

    // 从最后一个格子开始往前回溯,路线上的格子均修改为0,直到回到起点
    int tmpi = 0, tmpj = 0;
    i--, j--;
    a[i][j] = 0;
    while (i != 0 || j != 0)
    {
        tmpi = f[i][j].xx; tmpj = f[i][j].yy;
        a[tmpi][tmpj] = 0;
        i = tmpi; j = tmpj;
    }

    // 进行第二条路径的dp
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + a[i][j];
        }
    ans += dp[n][n];
    cout << ans << endl;
    return 0;
}

2024/8/18 17:08
加载中...