| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 | 
|---|---|---|---|---|---|---|---|
| 1209151 | sano | Roller Coaster Railroad (IOI16_railroad) | C++20 | 0 ms | 0 KiB | 
#include<iostream>
#include<vector>
#include<queue>
#include<deque>
#include<string>
#include<fstream>
#include<algorithm>
#include <iomanip>
#include<map>
#include <set>
#include <unordered_map>
#include <stack>
#include <unordered_set>
#include <cmath>
#include <cstdint>
#include <cassert>
#include <bitset>
#include <random>
#include <chrono>
#include <cstring>
#define shit short int
#define ll long long
#define ld long double
#define int ll
#define For(i, n) for(int i = 0; i < (int)n; i++)
#define ffor(i, a, n) for(int i = (int)a; i < (int)n; i++)
#define rfor(i, n) for(int i = (int)n; i >= (int)0; i--)
#define rffor(i, a, n) for(int i = (int)n; i >= (int)a; i--)
#define vec vector
#define ff first
#define ss second
#define pb push_back
#define pii pair<int, int>
#define pld pair<ld, ld>
#define NEK 2000000000
#define mod 1000000007
#define mod2 1000000009
#define rsz resize 
#define prv 43
#define prv2 47
#define D 8
#define trav(a,x) for (auto& a: x)
#define pb push_back
#define ub upper_bound
#define lb lower_bound
#define all(x) (x).begin(), (x).end()
#define sig 0.0000001
using namespace std;
int pomale(vec<int>&s, vec<int>&t) {
    int n = s.size();
    vec<vec<int>> dp((1 << n), vec<int>(n, NEK));
    For(i, n) {
        dp[(1<<i)][i] = 0;
    }
    ffor(i, 1, (1<<n)) {
        For(j, n) {
            if (!((1 << j) & i)) continue;
            For(k, n) {
                if (k == j) continue;
                if (!((1 << k) & i)) continue;
                dp[i][j] = min(dp[i][j], dp[i - (1 << j)][k] + max((ll)0, t[k] - s[j]));
            }
        }
    }
    int mini = NEK;
    For(i, n) {
        mini = min(mini, dp[(1 << n) - 1][i]);
    }
    return mini;
}
ll rychle(vec<int>& s, vec<int>& t) {
    return 0;
}
long long plan_roller_coaster(vector<int> s, vector<int> t) {
    int n = s.size();
    if (n <= 16) return pomale(s, t);
    rychle(s, t);
}
/*
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n; cin >> n;
    vec<int> s(n), t(n);
    For(i, n) {
        cin >> s[i];
    }
    For(i, n) cin >> t[i];
    cout << plan_roller_coaster(s, t) << '\n';
    return 0;
}*/
