Submission #267077

#TimeUsernameProblemLanguageResultExecution timeMemory
267077cjoaRoller Coaster Railroad (IOI16_railroad)C++11
11 / 100
2081 ms26340 KiB
#include "railroad.h" #include <iostream> #include <map> using namespace std; typedef vector<int> VI; typedef long long llong; const long long INF = 4e18; int N; vector<int> S, T; bool all_visited(const vector<bool>& vis) { for (int u = 0; u < N; ++u) if (!vis[u]) return false; return true; } typedef pair< int, vector<bool> > Key; map<Key, long long> memo; long long go(int u, const vector<bool>& vis) { if (all_visited(vis)) { return 0; } if (memo.count( {u, vis} )) { return memo[ {u, vis} ]; } long long res = INF; for (int v = 0; v < N; ++v) { if (vis[v]) continue; vector<bool> new_vis = vis; new_vis[v] = true; int edge_cost = 0; if (T[u] > S[v]) edge_cost = T[u] - S[v]; long long cost = go(v, new_vis) + edge_cost; res = min(res, cost); } memo[ {u, vis} ] = res; return res; } long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) { N = (int) s.size(); if (N > 16) { return 0; } S = s; T = t; llong res = INF; for (int u = 0; u < N; ++u) { vector<bool> vis(N, false); vis[u] = true; long long cur = go(u, vis); res = min(res, cur); } return res; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...