제출 #54022

#제출 시각아이디문제언어결과실행 시간메모리
54022Alexa2001Roller Coaster Railroad (IOI16_railroad)C++17
34 / 100
86 ms9428 KiB
#include "railroad.h"
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
const ll inf = 1e18;
const int Nmax = 17;

int n, start[Nmax], finish[Nmax];
ll dp[1<<Nmax][Nmax];

ll solve1(vector<int> &start, vector<int> &finish)
{
    int i, j, k;

    for(i=0; i<(1<<n); ++i)
        for(j=0; j<n; ++j)
            dp[i][j] = inf;

    for(i=0; i<n; ++i) dp[1<<i][i] = 0;

    for(i=1; i<(1<<n); ++i)
        for(j=0; j<n; ++j)
            if(i&(1<<j))
                for(k=0; k<n; ++k)
                    if(!(i&(1<<k)))
                        dp[i^(1<<k)][k] = min(dp[i^(1<<k)][k], dp[i][j] + max(0, finish[j] - start[k]));

    ll ans = inf;
    for(j=0; j<n; ++j) ans = min(ans, dp[i-1][j]);
    return ans;
}

ll plan_roller_coaster(vector<int> s, vector<int> t)
{
    n = s.size();
    int i;
    for(i=1; i<=n; ++i) start[i] = s[i-1], finish[i] = t[i-1];

    if(n <= 16) return solve1(s, t);

    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...