路径计数
题目描述
有一个 \(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;
}
标签:24,通行,int,每日,样例,100,2022.10
From: https://www.cnblogs.com/Cocoicobird/p/16822370.html