Submission #241200

#TimeUsernameProblemLanguageResultExecution timeMemory
241200crossing0verRoller Coaster Railroad (IOI16_railroad)C++17
0 / 100
287 ms272888 KiB
#include<bits/stdc++.h>
/*#pragma GCC optimize("03")
#pragma GCC target("avx,avx2")
#pragma GCC optimeze("unroll-loops") */
#define inf 10000000000000000  
#define ll long long 
#include "railroad.h"
using namespace std;
int n;
ll dp[16][16][1 << 16],cost[16][16];

ll plan_roller_coaster(std::vector<int> a, std::vector<int> b) {
	n = a.size();
	for (int i = 0; i < n; i++) {
	for (int j = 0;j < n; j++) {
		if (b[i] > a[j] && j != i) cost[i][j] = b[i] - a[j];
	fill(dp[i][j],dp[i][j] + (1 << n),inf);
	}
	dp[i][i][(1 << i)] = 0;
	}
	for (int mask = 1; mask < (1 << n); mask++) 
	for (int i = 0; i < n; i++) {
		if ((1 << i) & mask) {
			for (int j = 0; j < n; j++) {
				if ( ((1 << j) & mask) && j != i) {
					for (int e = 0; e < n; e++) {
						if (e != j && dp[i][j][mask] > dp[i][e][mask^(1<<j)] + cost[e][i])
						dp[i][j][mask] = dp[i][e][mask^(1<<j)] + cost[e][i];
					}
				}
			}
		}
	}
	ll ans = inf;
	for (int i = 0; i < n; i++)
	for (int j = 0; j < n; j++)
		ans = min(ans,dp[i][j][(1<<n)-1]);
    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...