Submission #291616

#TimeUsernameProblemLanguageResultExecution timeMemory
291616shayan_pRoller Coaster Railroad (IOI16_railroad)C++17
34 / 100
79 ms8696 KiB
// Oh damn! Suddenly you're free to fly... #include<bits/stdc++.h> #include "railroad.h" #define F first #define S second #define PB push_back #define sz(s) int((s).size()) #define bit(n,k) (((n)>>(k))&1) using namespace std; typedef long long ll; typedef pair<int,int> pii; const int maxn = 2e5 + 10, mod = 1e9 + 7; const ll inf = 1e18 + 10; ll dp[1<<16][16]; void minim(ll &a, ll b){ a = min(a, b); } ll plan_roller_coaster(vector<int> a, vector<int> b){ int n = sz(a); for(int msk = 0; msk < (1<<n); msk++){ for(int i = 0; i < n; i++){ dp[msk][i] = inf; if(bit(msk, i) && __builtin_popcount(msk) == 1) dp[msk][i] = 0; } } for(int msk = 1; msk < (1<<n); msk++){ for(int i = 0; i < n; i++){ if(bit(msk, i) == 0) continue; for(int j = 0; j < n; j++){ if(i == j || bit(msk, j)) continue; minim(dp[msk | (1<<j)][j], dp[msk][i] + max(int(0), b[i] - a[j])); } } } 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...