1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
#include<algorithm> using namespace std; const int N=20050; int n,maxs,sum=0,w[N],f[N],g[N]; bool (int k) { f[1]=g[1]=w[1]; for(int i=2;i<=n;i++) { f[i]=min(w[1]-g[i-1],w[i]); g[i]=max(0,w[i]-(k-w[i-1]-w[1]+f[i-1])); } return !g[n]; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&w[i]),sum+=w[i]; maxs=w[1]+w[n]; for(int i=1;i<n;i++) maxs=max(maxs,w[i]+w[i+1]); if (!(n&1)) {printf("%d",maxs);return 0;} int L=maxs,R=sum; while (L<R) { int mid=(L+R)>>1; if (check(mid)) R=mid; else L=mid+1; } printf("%d",L); return 0; }
|
近期评论