# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1204586 | loiiii12358 | Roller Coaster Railroad (IOI16_railroad) | C++20 | 44 ms | 9356 KiB |
#include "railroad.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
int dp[1<<16][16],tmp;
vector<int> mask[17];
long long plan_roller_coaster(std::vector<int32_t> s, std::vector<int32_t> t) {
int n = (int) s.size();
if(n>20){
return 0;
}
for(int i=0;i<(1<<n);i++){
tmp=0;
for(int j=0;j<n;j++){
if(i&(1<<j)){
tmp++;
}
dp[i][j]=1e18;
}
mask[tmp].push_back(i);
}
for(int i=0;i<n;i++){
dp[1<<i][i]=0;
}
for(int i=2;i<=n;i++){
for(int j=0;j<mask[i].size();j++){
for(int k=0;k<n;k++){
if(mask[i][j]&(1<<k)){
for(int l=0;l<n;l++){
if((mask[i][j]^(1<<k))&(1<<l)){
dp[mask[i][j]][k]=min(dp[mask[i][j]][k],dp[mask[i][j]^(1<<k)][l]+max(0,t[l]-s[k]));
}
}
}
}
}
}
tmp=1e18;
for(int i=0;i<n;i++){
tmp=min(tmp,dp[(1<<n)-1][i]);
}
return tmp;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |