讨论/题目交流/求大佬帮忙看下,为什么这样写过不了,用注释掉的代码就能过,感觉自己就是一个弱智/
求大佬帮忙看下,为什么这样写过不了,用注释掉的代码就能过,感觉自己就是一个弱智
// 动态规划
#define MAX(x, y) (x) > (y) ? (x) : (y)

int maxValue(int **grid, int gridSize, int *gridColSize)
{
    if ((grid == NULL) || (gridSize == 0)) {
        return 0;
    }

    int dp[gridSize][gridColSize[0]];
    dp[0][0] = grid[0][0];

    // 先直走
    for (int i = 1; i < gridColSize[0]; i++) {
        dp[0][i] = dp[0][i - 1] + grid[0][i]; 
    }

    // 在往下走
    for (int j = 1; j < gridSize; j++) {
        dp[j][0] = dp[j - 1][0] + grid[j][0];
    }

    for (int i = 1; i < gridSize; i++) {
        for (int j = 1; j < gridColSize[0]; j++) {
            // int tmp = MAX(dp[i - 1][j], dp[i][j - 1]);
            // dp[i][j] = grid[i][j] + tmp;
            dp[i][j] = grid[i][j] + MAX(dp[i - 1][j], dp[i][j - 1]);
        }
    }

    return dp[gridSize - 1][gridColSize[0] - 1];
}
展开讨论
共 2 个讨论

你过不了的代码用宏替换后实际上是:
grid[i][j]+dp[i-1][j]>dp[i][j-1]:dp[i-1][j]?dp[i][j-1]
你可以逐行打印一下看看结果
这样定义#define MAX ((x, y) (x) > (y) ? (x) : (y))
应该就没问题。
c的宏替换坑太多

感觉是宏的问题,多在宏里面套括号吧