見出し画像

アルゴリズム道中記〜20240408〜

ぼくの学校の図書館に、鉄則本がありました。早速借りて、DPの問題を考えました。毎回、DPで挫折しているように気がするからです。

#include <bits/stdc++.h>
#define print(x) cout << x << endl;
#define rep(i, s, n) for (long long i = s; i < (long long)(n); i++)
using namespace std;
using ll = long long;

int main() {
  ll N;
  cin >> N;
  vector<ll> A(N), B(N);
  vector<ll> dp(N+1);
  rep (i, 2, N+1) cin >> A[i];
  rep (i, 3, N+1) cin >> B[i];
  dp[1] = 0;
  dp[2] = A[2];
  rep (i, 3, N+1)
    dp[i] = min(dp[i-1] + A[i], dp[i-2] + B[i]);
  print(dp[N]);
  return 0;
}

しかしながら、答えは同じであるのに、通りません。普通のカエル跳び問題だと思ったのですが… なんだかよくわかりませんので、今日のところは放置することにします。

明日は、ナップザックでも取り組もうかと思います。

この記事が気に入ったらサポートをしてみませんか?