UVa 825 Walking on the Safe Side(简单DP)

题意:

有t组测试数据,每组测试数据给一个矩阵n,m。

接下来给出n行,每行第一个数字为该行的编号(从1开始),然后给出这行不能走的y坐标。

问从出发点(1,1),到(n,m)有多少种不同的路径。

思路:

dfs思想根深蒂固啊,其实是很简单的递推题目,仔细思考再决定要不要深度递归。

#include <cstdio>

#include <cstdlib>

#include <cstring>



const int MAXN = 128;

bool map[MAXN][MAXN];

int dp[MAXN][MAXN];



int main()

{

    int cases;

    scanf("%d", &cases);

    while (cases--)

    {

        int row, col;

        scanf("%d %d", &row, &col);



        for (int i = 1; i <= row; ++i)

        {

            for (int j = 1; j <= col; ++j)

                map[i][j] = true;



            char str[MAXN];

            int r, c;



            scanf("%d", &r);

            gets(str);



            for (int j = 0, c = 0; j <= strlen(str); ++j)

                if ('0' <= str[j] && str[j] <= '9')

                    c = c * 10 + str[j] - '0';

                else

                    map[r][c] = false, c = 0;           

        }

        

        memset(dp, 0, sizeof(dp));



        dp[1][1] = 1;

        map[1][1] = false;



        for (int i = 1; i <= row; ++i)

            for (int j = 1; j <= col; ++j)

                if (map[i][j])

                    dp[i][j] = dp[i-1][j] + dp[i][j-1];



        printf("%d\n", dp[row][col]);

        if (cases)

            printf("\n");

    }

    return 0;

}

 

 

你可能感兴趣的:(ide)