# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
137618 | 2019-07-28T07:37:13 Z | miguel | 선물상자 (IOI15_boxes) | C++14 | 0 ms | 0 KB |
#include<bits/stdc++.h> #include<boxes.h> using namespace std; #define rc(x) return cout<<x<<endl,0 #define pb push_back #define dbg(x) cout << #x << '=' << x << '\n'; #define ll long long //#define int ll #define sz size() #define x first #define y second #define pi pair <int, int> #define pii pair <pi, int> #define vi vector <int> const ll nmax=1e5+2; const ll mod = 998244353; int delivery(int n, int k, int l, int pos[]){ ll ans=1000000000000000000; int pcarne[n]; ll dp1[n], dp2[n]; for(int i=0; i<n; i++) pcarne[i]=pos[n-i-1]; for(int i=0; i<n; i++){ if(i<k) dp1[i]=pos[i]*2; else dp1[i]=dp1[i-k]+1LL*pos[i]*2; } for(int i=0; i<n; i++){ if(i<k) dp2[i]=(l+1-pos[n-i-1])*2; else dp2[i]=dp2[i-k]+1LL*(l+1-pos[n-i-1])*2; } //for(int i=0; i<n; i++) cout<<dp1[i]<<" "; cout<<endl;for(int i=0; i<n; i++) cout<<dp2[i]<<" "; cout<<endl; for(int i=0; i<n-1; i++){ ans=min(ans, dp1[i]+dp2[n-2-i]); } ans=min(ans, min(dp1[n-1], dp2[n-1])); //cout<<"ans: "<<ans<<endl; if(n<=k) ans=min(ans, 1LL*l); else{ for(int i=0; i<=n-k-2; i++){ ans=min(ans, dp1[i]+l+dp2[n-2-k-i]); } ans=min(ans, 1LL*l+min(dp1[n-k-1], dp2[n-k-1])); } return (int)ans; }