Atcoder Educational DP Contest H - Grid 1
View as PDFCho lưới hình chữ nhật gồm ~H~ hàng và ~W~ cột. Ô ~(i,j)~ được định nghĩa là ô vuông giao giữa hàng thứ ~i~ (từ trên xuống dưới) và cột thứ ~j~ (từ trái qua phải).
Mỗi ô vuông ~(i,j)~ ~(1 \leq i \leq H, 1 \leq j \leq W)~ được biểu diễn bởi 1 kí tự ~a_{i,j}~. Nếu ~a_{i,j}~ là ., ô ~(i,j)~ là một ô rỗng. Ngược lại, nếu ~a_{i,j}~ là #, ô ~(i,j)~ chứa vật cản.
Taro sẽ bắt đầu từ ô ~(1,1)~ đi tới ô ~(H,W)~. Mỗi bước đi, Taro chỉ có thể có di chuyển từ ô hiện tại tới ô liền kề bên phải hoặc ô liền kề phía dưới, với điều kiện ô đó phải là một ô rỗng.
Xác định số đường đi mà Taro có thể đi từ ô ~(1,1)~ tới ô ~(H,W)~. Đáp án có thể rất lớn, vì vậy chỉ in ra phần dư của nó khi chia cho ~10^9 + 7~.
Input
Dòng đầu tiên chứa hai số nguyên ~H~ và ~W~, lần lượt là số hàng và số cột của lưới. ~(2 \leq H, W \leq 1000)~
Dòng thứ ~i~ trong số ~H~ dòng tiếp theo chứa ~W~ kí tự, lần lượt là ~a_{i,1}....a_{i,W}~.
Đảm bảo rằng hai ô ~(1,1)~ và ~(H,W)~ luôn là ô rỗng.
Output
Gồm một số nguyên duy nhất là phần dư của số đường đi thỏa mãn mà Taro có thể đi khi chia cho ~10^9 + 7~.
Sample 1
Input
3 4
...#
.#..
....
Output
3
Giải thích
Có ~3~ cách đi như hình sau:

Sample 2
Input
5 2
..
#.
..
.#
..
Output
0
Giải thích
Không có bất cứ cách đi nào thỏa mãn.
Sample 3
Input
5 5
..#..
.....
#...#
.....
..#..
Output
24
Sample 4
Input
20 20
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
Output
345263555
Comments
include<bits/stdc++.h>
using namespace std;
define vec vector
define ll long long
int i,j; int main(){ iosbase::syncwith_stdio(0); cin.tie(0);cout.tie(0); int n,m;cin>>n>>m; vec<vec>a(n+1,vec<char>(m+1)); vec<vec>dp(n+1,vec<ll>(m+1,0)); for(i=1;i<=n;i++){ for(j=1;j<=m;j++)cin>>a[i][j]; } dp[1][1]=1; for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ if(i==1 && j==1) continue; if(a[i][j]=='#')continue; else { dp[i][j]=(dp[i-1][j]+dp[i][j-1])%1000000007; } } } cout<<dp[n][m]; }</vec></vec>
dp đếm
bai nay dung Grid dp
code vi du: code
This comment is hidden due to too much negative feedback. Show it anyway.
ơn cảm
cảm ơn ạ
This comment is hidden due to too much negative feedback. Show it anyway.
This comment is hidden due to too much negative feedback. Show it anyway.