Submission #787520

#TimeUsernameProblemLanguageResultExecution timeMemory
787520Sohsoh84Roller Coaster Railroad (IOI16_railroad)C++17
0 / 100
38 ms6752 KiB
#include "railroad.h" #include <bits/stdc++.h> typedef long long ll; using namespace std; #define all(x) (x).begin(), (x).end() #define debug(x) cerr << #x << ": " << x << endl; #define sep ' ' const ll MAXN = 1e6 + 10; const ll INF = 1e18; ll f[MAXN], n, m; vector<ll> comp_vec; ll dp[MAXN][20]; inline int ind(ll x) { return lower_bound(all(comp_vec), x) - comp_vec.begin() + 1; } ll plan_roller_coaster(vector<int> s, vector<int> t) { n = s.size(); int max_t = 0; for (int i = 0; i < n; i++) if (s[i] < s[max_t]) max_t = i; for (int mask = 1; mask < (1 << n); mask++) { vector<int> vec; for (int v = 0; v < n; v++) if (mask >> v & 1) vec.push_back(v); if (int(vec.size()) < 2) { if (vec.front() != max_t) dp[mask][vec.front()] = INF; continue; } for (int e : vec) { dp[mask][e] = INF; for (int e2 : vec) { if (e == e2) continue; dp[mask][e] = min(dp[mask][e], dp[mask ^ (1 << e)][e2] + max(0, t[e2] - s[e])); } } } ll ans = INF; for (int i = 0; i < n; i++) ans = min(ans, dp[(1 << n) - 1][i]); return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...