H - Grid 1
キーワード
解説
に対して、 を次のように定義する。
から に至る最短路の数
とする。
スタートが でゴールが であることから、最短路は右か下にしか進めない。つまり、 へは、 または からしか行けない。
よって、 に行く通りは、 または に行く通りの和に等しいことがわかる。
従って、次の漸化式が成り立つ。
問題から、 が壁の時は通れないことがわかるので、壁の時は とする。
計算量は となる。
最終的な答えは となる。
提出コード
int main() {
int h, w; cin >> h >> w;
vector<string> A(h); rep(i, 0, h) cin >> A[i];
vector<vector<ll>> dp(h, vector<ll>(w, 0));
dp[0][0] = 1;
rep(i, 0, h) rep(j, 0, w) {
if (i+1 < h && A[i+1][j] == '.') {
dp[i+1][j] += dp[i][j];
dp[i+1][j] %= 1000000007;
}
if (j+1 < w && A[i][j+1] == '.'){
dp[i][j+1] += dp[i][j];
dp[i][j+1] %= 1000000007;
}
}
cout << dp[h-1][w-1] << endl;
}