結果

問題 No.1 道のショートカット
ユーザー trineutron
提出日時 2020-03-24 18:02:54
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 7 ms / 5,000 ms
コード長 1,200 bytes
コンパイル時間 2,895 ms
コンパイル使用メモリ 205,132 KB
最終ジャッジ日時 2025-01-09 10:03:02
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 40
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

int main() {
    const int inf = 10000000;
    int n, c, v;
    cin >> n >> c >> v;
    vector<int> s(v), t(v), y(v), m(v);
    for (int i = 0; i < v; i++) {
        cin >> s.at(i);
        s.at(i)--;
    }
    for (int i = 0; i < v; i++) {
        cin >> t.at(i);
        t.at(i)--;
    }
    for (int i = 0; i < v; i++) {
        cin >> y.at(i);
    }
    for (int i = 0; i < v; i++) {
        cin >> m.at(i);
    }
    vector<vector<tuple<int, int, int>>> from(n);
    for (int i = 0; i < v; i++) {
        from.at(t.at(i)).emplace_back(s.at(i), y.at(i), m.at(i));
    }
    vector<vector<int>> dp(n, vector<int>(c + 1, inf));
    dp.at(0).at(0) = 0;
    for (int i = 1; i < n; i++) {
        for (int j = 0; j <= c; j++) {
            for (auto x : from.at(i)) {
                int si = get<0>(x), yi = get<1>(x), mi = get<2>(x);
                if (j < yi) continue;
                dp.at(i).at(j) = min(dp.at(i).at(j), dp.at(si).at(j - yi) + mi);
            }
        }
    }
    int ans = *min_element(dp.at(n - 1).begin(), dp.at(n - 1).end());
    if (ans < inf) {
        cout << ans << endl;
    } else {
        cout << -1 << endl;
    }
}
0