제출 #434140

#제출 시각아이디문제언어결과실행 시간메모리
434140Collypso선물상자 (IOI15_boxes)C++17
50 / 100
330 ms524292 KiB
#include <bits/stdc++.h> #define ll long long #define ld long double #define pii pair<int, int> #define pll pair<ll, ll> #define vt vector #define pb push_back #define all(x) (x).begin(), (x).end() #define sz(x) (int) (x).size() #pragma GCC optimize ("O3") #pragma GCC optimize ("O2") #define F first #define S second //#define endl '\n' //#define int long long using namespace std; ll delivery(int N, int K, int L, int p[]) { if (K == 1) { ll ans = 0; for(int i = 0; i < N; i++) ans += 2 * min(p[i], L - p[i]); return ans; } sort(p, p + N); ll dp[N][K + 1]; dp[0][K] = 2ll * min(p[0], L - p[0]); for(int i = K - 1; i >= 0; i--) dp[0][i] = min(p[0], L - p[0]); for(int i = 1; i < N; i++) { ll tmp1 = abs(p[i] - p[i - 1]); ll tmp2 = L - abs(p[i] - p[i - 1]); ll dist = min(tmp1, tmp2); dp[i][K] = dp[i - 1][1] + dist + min(p[i], L - p[i]); dp[i][K - 1] = dp[i - 1][K] + min(p[i], L - p[i]); for(int j = K - 2; j >= 0; j--) dp[i][j] = dp[i - 1][j + 1] + dist; } ll mn = LLONG_MAX; for(int i = 0; i <= K; i++) mn = min(mn, dp[N - 1][i]); //cout << endl; mn += min(p[N - 1], L - p[N - 1]); //for(int x : order) cout << p[x] << " "; //cout << endl; //cout << endl; return mn; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...