Submission #1137445

#TimeUsernameProblemLanguageResultExecution timeMemory
1137445gygRoller Coaster Railroad (IOI16_railroad)C++20
34 / 100
141 ms7256 KiB
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define arr array
#define vec vector
#define pii pair<int, int>
#define fir first 
#define sec second
#define ub upper_bound 
const int N = 18, INF = 1e18;

int n;
arr<int, N> s, t;

int wt(int i) { return 1 << (i - 1); }
bool on(int x, int i) { return x & wt(i); }
vec<int> in(int x) {
    vec<int> ans;
    for (int i = 1; i <= n; i++)
        if (on(x, i)) ans.push_back(i);
    return ans;
}

arr<arr<int, 1 << N>, N> dp;
void dp_cmp() {
    for (int st = 1; st < (1 << n); st++) {
        if (in(st).size() == 1) continue;
        for (int i : in(st)) {
            dp[i][st] = INF;
            int nw_st = st ^ wt(i);
            for (int j : in(st)) {
                if (j == i) continue;
                dp[i][st] = min(dp[i][st], dp[j][nw_st] + max(t[j] - s[i], 0ll));
            }
        }
    }
}

int plan_roller_coaster(vec<signed> _s, vec<signed> _t) {
    n = _s.size();
    for (int i = 1; i <= n; i++) s[i] = _s[i - 1], t[i] = _t[i - 1];
    dp_cmp();
    
    int ans = INF;
    for (int i = 1; i <= n; i++) ans = min(ans, dp[i][(1 << n) - 1]);
    return ans;
}

Compilation message (stderr)

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...