最大路径数:递归函数(但是用动态规划做)

最大路径数:递归函数(但是用动态规划做)_第1张图片

最大路径数:递归函数(但是用动态规划做)_第2张图片

发现这种方向简单的移动题基本上都可以用动态规划做

代码如下:

#include

int main(void)
{
    int n, map[15][15][2] = {0};//0为所在点数值,1为所在点最大路径数
    scanf("%d", &n);
    for(int i = n - 1; i >= 0; i--)
        for(int j = 0; j < n; j++)
            scanf("%d", &map[i][j][0]);
    for(int i = 1; i < n; i++)
    {
        map[0][i][1] = 1;
        map[0][i][0] += map[0][i - 1][0];
        map[i][0][1] = 1;
        map[i][0][0] += map[i - 1][0][0];
    }
    for(int i = 1; i < n; i++)
        for(int j = 1; j < n; j++)
        {
            if(map[i - 1][j][0] == map[i][j - 1][0])
            {
                map[i][j][0] += map[i - 1][j][0];
                map[i][j][1] = map[i][j - 1][1] + map[i - 1][j][1];
            }
            else if(map[i - 1][j][0] > map[i][j - 1][0])
            {
                map[i][j][0] += map[i - 1][j][0];
                map[i][j][1] = map[i - 1][j][1];
            }
            else
            {
                map[i][j][0] += map[i][j - 1][0];
                map[i][j][1] = map[i][j - 1][1];
            }
        }
    printf("%d %d", map[n - 1][n - 1][1], map[n - 1][n - 1][0]);

    return 0;
}

你可能感兴趣的:(动态规划,算法)