Submission #100046

#TimeUsernameProblemLanguageResultExecution timeMemory
100046tqbfjotldRoller Coaster Railroad (IOI16_railroad)C++14
34 / 100
108 ms27728 KiB
#include "railroad.h" #include <bits/stdc++.h> using namespace std; vector<int> s_; vector<int> t_; long long mem[17][65537]; long long plan_roller_coaster(std::vector<int> s, std::vector<int> t) { int n = (int) s.size(); /*if (n<=8){ vector<int> v; for (int x = 0; x<n; x++){ v.push_back(x); } long long ans = 999999999999999; long long curans = 0; for (int x = 1; x<n; x++){ curans+=(t[x-1]>s[x])?(t[x-1]-s[x]):0; } ans = min(curans,ans); while (next_permutation(v.begin(),v.end())){ long long curans = 0; for (int x = 1; x<n; x++){ curans+=(t[v[x-1]]>s[v[x]])?(t[v[x-1]]-s[v[x]]):0; } ans = min(curans,ans); } return ans; } else{*/ memset(mem,-1,sizeof(mem)); for (int x = 0; x<n; x++){ s_.push_back(s[x]); t_.push_back(t[x]); } long long fans = 999999999999999; for (int bitmask = 0; bitmask<(1<<n); bitmask++){ for (int cur = 0; cur<n; cur++){ if (bitmask==0) {mem[cur][bitmask]=0;continue;} int cop = bitmask; long long ans = 999999999999999; for (int x = 0;cop!=0 ; x++){ if ((cop&(1<<x))!=0){ ans = min(ans,mem[x][bitmask-(1<<x)]+((t_[cur]>s_[x])?(t_[cur]-s_[x]):0)); cop-=(1<<x); } //printf("%i\n",x); } mem[cur][bitmask] = ans; } } for (int x = 0; x<n; x++){ fans = min(fans,mem[x][(1<<n)-1-(1<<x)]); } return fans; //} 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...