제출 #289330

#제출 시각아이디문제언어결과실행 시간메모리
289330SaboonRoller Coaster Railroad (IOI16_railroad)C++17
0 / 100
2080 ms8576 KiB
#include "railroad.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 16; const ll inf = 1e18; ll dp[(1<<maxn)+10][maxn], adj[maxn][maxn]; ll plan_roller_coaster(vector<int> s, vector<int> t){ int n = (int)s.size(); vector<pair<int,int>> tmp(n); for (int i = 0; i < n; i++) tmp[i] = {s[i],t[i]}; sort(tmp.begin(), tmp.end()); for (int i = 0; i < n; i++) s[i] = tmp[i].first, t[i] = tmp[i].second; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (i != j) adj[i][j] = max(0,t[i]-s[j]); memset(dp, 63, sizeof dp); for (int mask = 1; mask < (1 << n); mask++){ for (int v = 0; v < n; v++){ if (!(mask & (1<<v))) continue; int sub = mask^(1<<v); if (sub == 0 and v == 0) dp[mask][v] = 0; else for (int u = 0; u < n; u++) if (sub & (1 << u)) dp[mask][v] = min(dp[mask][v], dp[sub][u]+adj[u][v]); } } ll answer = inf; for (int i = 0; i < n; i++) answer = min(answer, dp[(1<<n)-1][i]); return answer; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...