Submission #99980

#TimeUsernameProblemLanguageResultExecution timeMemory
99980jamielimRoller Coaster Railroad (IOI16_railroad)C++14
0 / 100
93 ms10672 KiB
#include <bits/stdc++.h> #include "railroad.h" using namespace std; long long adj[20][20]; long long memo[20][66000]; long long tsp(int x,int bm){ if(memo[x][bm]!=-1)return memo[x][bm]; if(bm==0)return memo[x][bm]=0; long long ans=1000000000000000010; int bm2=bm; while(bm2&(-bm2)){ int y=__builtin_ctz(bm2); ans=min(ans,tsp(y,bm-(bm2&(-bm2)))+adj[x][y]); bm2-=(bm2&(-bm2)); } return memo[x][bm]=ans; } long long plan_roller_coaster(vector<int> s, vector<int> t) { int n=(int)s.size(); if(n>16){ vector<pair<int,int> > v; v.push_back(make_pair(1,1)); for(int i=0;i<n;i++)v.push_back(make_pair(s[i],t[i])); sort(v.begin(),v.end()); for(int i=1;i<=n;i++){ if(v[i].first<v[i-1].second){ return 0; } } return 1; } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ adj[i][j]=max(0,t[i]-s[j]); } } for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ for(int k=0;k<n;k++){ adj[j][k]=min(adj[j][k],adj[j][i]+adj[i][k]); } } } memset(memo,-1,sizeof(memo)); long long ans=1000000000000000010; for(int i=0;i<n;i++){ ans=min(ans,tsp(i,(1<<n)-1-(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...