Submission #1246418

#TimeUsernameProblemLanguageResultExecution timeMemory
1246418SpyrosAlivBoxes with souvenirs (IOI15_boxes)C++20
0 / 100
2096 ms412 KiB
#include "boxes.h" #include <bits/stdc++.h> using namespace std; #define ll long long int n, k, l; const ll INF = 1e13; long long delivery(int N, int K, int L, int p[]) { n = N; k = K; l = L; ll ans = n * L; vector<int> ord; for (int i = 0; i < n; i++) ord.push_back(i); do { vector<ll> dp(k+1); for (int i = 0; i < k; i++) dp[i] = INF; dp[k] = 0; ll pos = 0; for (int i = 0; i < n; i++) { ll nxt = p[ord[i]]; ll minDis = min(abs(nxt - pos), L - abs(nxt - pos)); vector<ll> dp2; dp2 = dp; dp2[k] = INF; for (int kk = 1; kk <= k; kk++) { dp2[kk-1] = min(INF, dp[kk] + minDis); if (kk < k) dp2[k] = min(dp2[k], dp[kk] + min(pos, L - pos) + min(nxt, L - nxt)); } dp2[k] = min(dp2[k], dp[0] + min(pos, L - pos) + min(nxt, L - nxt)); pos = p[ord[i]]; dp = dp2; } ll minDis = min(pos, L - pos); for (int i = 0; i <= k; i++) { ans = min(ans, minDis + dp[i]); } } while (next_permutation(ord.begin(), ord.end())); return ans; } /* signed main() { int n, k, l; cin >> n >> k >> l; int p[n]; for (int i = 0; i < n; i++) cin >> p[i]; cout << delivery(n, k, l, p) << "\n"; }*/
#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...