Submission #503782

#TimeUsernameProblemLanguageResultExecution timeMemory
503782colossal_pepePinball (JOI14_pinball)C++17
29 / 100
1076 ms96300 KiB
#include <iostream>
#include <map>
#include <tuple>
using namespace std;

typedef long long ll;

const ll INF = 1e18;

int n, m, a[1005], b[1005], c[1005];
ll d[1005];
map<tuple<int, int, int>, ll> dp;

ll brutus(int i, int l, int r) {
    if (l == r) return 0;
    if (i >= n) return INF;
    if (dp.find({i, l, r}) != dp.end()) return dp[{i, l, r}];
    ll ans = INF;
    ans = min(ans, brutus(i + 1, l, r));
    if (a[i] <= l and b[i] >= r) {
        ans = min(ans, brutus(i + 1, c[i], c[i]) + d[i]);
    } else if (a[i] <= l) {
        ans = min(ans, brutus(i + 1, c[i], r) + d[i]);
    } else if (b[i] >= r) {
        ans = min(ans, brutus(i + 1, l, c[i]) + d[i]);
    }
    dp[{i, l, r}] = ans;
    return ans;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> m;
    for (int i = 0; i < n; i++) {
        cin >> a[i] >> b[i] >> c[i] >> d[i];
    }
    brutus(0, 1, m);
    cout << (dp[{0, 1, m}] >= INF ? -1 : dp[{0, 1, m}]) << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...