B - Frog 2
キーワード
解説
を次のように定義する。
足場 に到達するために支払うコストの最小値
足場 からスタートするため、 とする。
足場 への移動は、足場 の 通りがある。 へ行くのにかかる最小コストは、足場 へ行くのにかかる最小コストに、それらから足場 へ行くためのコストを加えたものの最小値。
よって次のような漸化式が立てられる。
最終的な答えは となる。
計算量は、一回の遷移が で行えるため、全体で となる。
提出コード
int main() {
int n, k; cin >> n >> k;
vector<int> H(n); rep(i, 0, n) cin >> H[i];
vector<int> dp(n, INT_MAX);
dp[0] = 0;
rep(i, 1, n) {
int m = INT_MAX;
rep(j,1,k+1) if (i-j >= 0) m = min(m, dp[i-j] + abs(H[i] - H[i-j]));
dp[i] = m;
}
cout << dp[n-1] << endl;
}