Submission #1191751

#TimeUsernameProblemLanguageResultExecution timeMemory
1191751simona1230Roller Coaster Railroad (IOI16_railroad)C++20
0 / 100
25 ms4676 KiB
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;

long long dp[100001][16];
int s[100001],f[100001];
int n;
long long plan_roller_coaster(vector<int> v1, vector<int> v2)
{
    n=v1.size();
    for(int i=0;i<(1<<n);i++)
        for(int j=0;j<n;j++)dp[i][j]=-1;
    for(int i=0;i<v1.size();i++)
        s[i]=v1[i],f[i]=v2[i];
        long long ans=1e18;
    for(int i=0;i<(1<<n);i++)
    {
        for(int j=0;j<n;j++)
        {
            if(!((1<<j)&i))continue;
            if(i-(1<<j)==0)
            {
                if(s[j]==1)
                {
                    //cout<<"+ "<<j<<endl;
                    dp[i][j]=0;
                }
                if(i==(1<<n)-1&&dp[i][j]!=-1)
                    ans=min(ans,dp[i][j]);
                continue;
            }
            for(int x=0;x<n;x++)
            {
                if(x==j||!(i&(1<<x)))continue;
                if(dp[i-(1<<j)][x]!=-1)
                {
                    if(dp[i][j]==-1)dp[i][j]=dp[i-(1<<j)][x]+max(0,f[x]-s[j]);
                    else dp[i][j]=min(dp[i][j],dp[i-(1<<j)][x]+max(0,f[x]-s[j]));
                }
            }
            if(i==(1<<n)-1&&dp[i][j]!=-1)
                ans=min(ans,dp[i][j]);
                //cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
        }
    }


    return ans;
}

Compilation message (stderr)

railroad.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
railroad_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...