Frog 1 とほぼ同じ問題!
問題概要
あるダンジョンには 個の部屋があり、 と番号がついている。このダンジョンは一方通行であり、通路を介して 1 つ先または 2 つ先の部屋に移動することができる。各通路における移動時間は以下の通り。
- 部屋 から部屋 : 分
- 部屋 から部屋 : 分
太郎君が部屋 1 から部屋 に移動するのに、最短何分かかるか。
制約
メモ
DP の入門問題。鉄則本の問題なので、解説は鉄則本を参照。
コード
#include <bits/stdc++.h> using namespace std; const int INF = 1<<30; int main() { int N; cin >> N; vector<int> A(N), B(N); for (int i = 1; i < N; i++) cin >> A[i]; for (int i = 2; i < N; i++) cin >> B[i]; vector<int> dp(N, INF); dp[0] = 0; for (int i = 0; i < N; i++) { if (i-1 >= 0) dp[i] = min(dp[i], dp[i-1] + A[i]); if (i-2 >= 0) dp[i] = min(dp[i], dp[i-2] + B[i]); } cout << dp[N-1] << endl; }