Submission #1013743

#TimeUsernameProblemLanguageResultExecution timeMemory
1013743pawnedRoller Coaster Railroad (IOI16_railroad)C++17
34 / 100
38 ms20660 KiB
#pragma GCC optimize("O1,O2,O3,Ofast,unroll-loops")

#include <bits/stdc++.h>
using namespace std;

#define fi first
#define se second
#define pb push_back
typedef long long ll;
typedef pair<ll, ll> ii;
typedef vector<ll> vi;

#include "railroad.h"

ll plan_roller_coaster(vector<int> s_g, vector<int> t_g) {
	vi s, t;
	int N = (int)(s_g.size());
	for (int i = 0; i < N; i++) {
		s.pb(s_g[i]);
		t.pb(t_g[i]);
	}
	vector<vi> dp(1 << N, vi(N, 1e18));
	vector<vi> allc(N + 1);
	for (int i = 0; i < (1 << N); i++) {
		int cnt = 0;
		for (int j = 0; j < N; j++) {
			if (i & (1 << j))
				cnt++;
		}
		allc[cnt].pb(i);
	}
/*	cout<<"allc: "<<endl;
	for (int i = 0; i <= N; i++) {
		cout<<i<<": ";
		for (int x : allc[i])
			cout<<x<<" ";
		cout<<endl;
	}*/
	for (int i = 0; i < N; i++) {
		dp[1 << i][i] = 0;
	}
	for (int i = 2; i <= N; i++) {	// count reached
		for (ll x : allc[i]) {	// bitmask
			for (int j = 0; j < N; j++) {	// last val
				if ((x & (1 << j)) == 0)
					continue;
				// last is j
				for (int k = 0; k < N; k++) {	// before last
					if (k != j && ((x & (1 << k)) != 0)) {
						dp[x][j] = min(dp[x][j], dp[x ^ (1 << j)][k] + max(t[k] - s[j], 0LL));
/*						cout<<"x, j, k: "<<x<<" "<<j<<" "<<k<<endl;
						cout<<"have "<<(x & (1 << j))<<", "<<(x & (1 << k))<<endl;
						cout<<"also "<<t[k]<<", "<<s[j]<<endl;*/
					}
				}
			}
		}
	}
/*	cout<<"dp: "<<endl;
	for (int i = 0; i < (1 << N); i++) {
		for (int j = 0; j < N; j++) {
			if (dp[i][j] != 1e18)
				cout<<dp[i][j]<<" ";
			else
				cout<<"- ";
		}
		cout<<endl;
	}*/
	ll minimum = 1e18;
	for (int i = 0; i < N; i++) {
		minimum = min(minimum, dp[(1 << N) - 1][i]);
	}
	return minimum;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...