AT_dp_h Grid 1题解
题目描述
有一个高 H 行、宽 W 列的网格。第 i 行第 j 列的格子用 (i,j) 表示。
对于每个 i,j(1≤i≤H,1≤j≤W),格子 (i,j) 的信息由字符 ai,j 给出。如果 ai,j 为 .,则格子 (i,j) 是空格;如果 ai,j 为 #,则格子 (i,j) 是墙。保证格子 (1,1) 和 (H,W) 都是空格。
太郎君从格子 (1,1) 出发,每次只能向右或向下移动到相邻的空格,目标是到达格子 (H,W)。
请问从 (1,1) 到 (H,W) 的路径有多少种?由于答案可能非常大,请输出答案对 109+7 取模的结果。
输入格式
输入从标准输入读入,格式如下:
H W
a1,1 … a1,W
⋮
aH,1 … aH,W
输出格式
输出从 (1,1) 到 (H,W) 的路径数,对 109+7 取模。
显示翻译
题意翻译
输入输出样例
输入 #1复制
3 4 ...# .#.. ....
输出 #1复制
3
输入 #2复制
5 2 .. #. .. .# ..
输出 #2复制
0
输入 #3复制
5 5 ..#.. ..... #...# ..... ..#..
输出 #3复制
24
输入 #4复制
20 20 .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... .................... ....................
输出 #4复制
345263555
说明/提示
限制条件
- H 和 W 是整数。
- 2≤H,W≤1000。
- ai,j 只可能是
.或#。 - (1,1) 和 (H,W) 都是空格。
样例解释 1
路径共有 3 条,如下图所示。

样例解释 2
也有可能不存在任何路径。
样例解释 4
不要忘记输出答案时要对 109+7 取模。
由 ChatGPT 4.1 翻译
思路
直接DP即可。
代码见下
#include<bits/stdc++.h>
using namespace std;
long long h,w,f[1001][1001],mod=1e9+7;
char ch[1001][1001];
int main(){
cin>>h>>w;
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
cin>>ch[i][j];
}
}
f[1][1]=1;
for(int i=1;i<=h;i++){
for(int j=1;j<=w;j++){
if(ch[i][j]=='.'){
f[i][j]+=f[i-1][j];
f[i][j]+=f[i][j-1];
f[i][j]%=mod;
}
}
}
cout<<f[h][w]%mod<<endl;
return 0;
}

浙公网安备 33010602011771号