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;
}

 

 

posted @ 2012-11-15 22:27  kedebug  阅读(499)  评论(0编辑  收藏  举报