結果
問題 | No.1037 exhausted |
ユーザー |
![]() |
提出日時 | 2020-08-28 05:39:23 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 46 ms / 2,000 ms |
コード長 | 1,871 bytes |
コンパイル時間 | 1,808 ms |
コンパイル使用メモリ | 172,568 KB |
実行使用メモリ | 34,688 KB |
最終ジャッジ日時 | 2024-11-09 01:00:39 |
合計ジャッジ時間 | 3,166 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 23 |
ソースコード
#include <bits/stdc++.h>using namespace std;#define rep(i, n) for(int(i) = 0; (i) < (n); (i)++)#define FOR(i, m, n) for(int(i) = (m); (i) < (n); (i)++)#define All(v) (v).begin(), (v).end()#define pb push_back#define MP(a, b) make_pair((a), (b))template <class T> vector<T> make_vec(size_t a, T val) {return vector<T>(a, val);}template <class... Ts> auto make_vec(size_t a, Ts... ts) {return vector<decltype(make_vec(ts...))>(a, make_vec(ts...));}using ll = long long;using pii = pair<int, int>;using pll = pair<ll, ll>;using Graph = vector<vector<int>>;template <typename T> struct edge {int to;T cost;edge(int t, T c) : to(t), cost(c) {}};template <typename T> using WGraph = vector<vector<edge<T>>>;const int INF = 1 << 30;const ll LINF = 1LL << 60;const int MOD = 1e9 + 7;int main() {ll N, V, L;cin >> N >> V >> L;vector<ll> x(N + 2), v(N + 2), w(N + 2);x[0] = 0;v[0] = 0;w[0] = 0;int last = 0;rep(i, N) { cin >> x[i + 1] >> v[i + 1] >> w[i + 1]; }x[N + 1] = L;v[N + 1] = 0;w[N + 1] = 0;N = N + 2;auto dp = make_vec(N + 1, V + 1, (ll)INF);dp[0][V] = 0;// dp[i][j]:=iにいてガソリンがjのときの費用for(int i = 0; i < N - 1; i++) {int cost = x[i + 1] - x[i];for(int j = V; j >= 0; j--) {if(j - cost >= 0)dp[i + 1][j - cost] = min(dp[i + 1][j - cost], dp[i][j]);}for(int j = V; j >= 0; j--) {dp[i + 1][min(V, j + v[i + 1])] =min(dp[i + 1][min(V, j + v[i + 1])], dp[i + 1][j] + w[i + 1]);}for(int j = V - 1; j >= 0; j--) {dp[i + 1][j] = min(dp[i + 1][j], dp[i + 1][j + 1]);}}ll res = INF;rep(i, V + 1) { res = min(res, dp[N - 1][i]); }cout << (res == INF ? -1 : res) << endl;}