2022.10.24每日一题

路径计数

题目描述

有一个 \(n×n\) 的网格,有些格子是可以通行的,有些格子是障碍。
一开始你在左上角的位置,你可以每一步往下或者往右走,问有多少种走到右下角的方案。
由于答案很大,输出对 \(10^9+7\)取模的结果。

输入格式

第一行一个正整数 \(n\)
接下来 \(n\) 行,每行 \(n\) 个正整数,\(1\) 表示可以通行,\(0\) 表示不能通行。

输出格式

一个整数,表示答案。

样例输入
3
1 1 1
1 0 1
1 1 1
样例输出
2
数据范围

对于 \(100\%\) 的数据,保证 \(2≤n≤100\),左上角右下角都是可以通行的。

解题思路

一道比较基础的动态规划问题。

C++代码
#include <bits/stdc++.h>
using namespace std;
const int N = 110, mod = 1e9 + 7;

int n;
int g[N][N], f[N][N];

int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
            scanf("%d", &g[i][j]);
    f[0][1] = 1;
    for(int i = 1; i <= n; i ++)
        for(int j = 1; j <= n; j ++)
        {
            f[i][j] = (f[i - 1][j] + f[i][j - 1]) % mod;
            if(!g[i][j]) f[i][j] = 0;
        }
    printf("%d\n", f[n][n]);
    return 0;
}
posted @ 2022-10-24 18:25  Cocoicobird  阅读(34)  评论(0)    收藏  举报