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

posted @ 2025-10-22 21:03  bz02_2023f2  阅读(2)  评论(0)    收藏  举报  来源