# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1276885 | papaulo | 선물상자 (IOI15_boxes) | C++20 | 0 ms | 0 KiB |
#include "boxes.h"
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define MAXN 10100100
ll dpl[MAXN];
ll dpr[MAXN];
void getDp(int N, int K, int p[], ll *dp) {
dp[0]=0;
for(int i=1;i<=N;i++) {
dp[i]=dp[max(0, i-K)]+2LL*p[i-1];
}
}
ll delivery(int N, int K, int L, int p[]) {
getDp(N, K, p, dpl);
reverse(p, p+N);
for(int i=0;i<N;i++) p[i]=L-p[i];
getDp(N, K, p, dpr);
for(int i=K;i<=N;i++) {
dpr[i]=min(dpr[i], dpr[i-K]+L);
}
ll ans=1e18L;
for(int i=0;i<=N;i++) {
ans=min(ans, dpl[i]+dpr[N-i]);
}
return ans;
}
int main() {
int N=3, K=2, L=8;
int p[]={1, 2, 5};
cout << delivery(N, K, L, p) << endl;
return 0;
}