#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
#define INF 0x7f7f7f7f
#define MAXN (100000+5)
int n;
int r[MAXN];
int r1[MAXN], r2[MAXN];
bool check(int num_p){
int tot1 = r[1], tot2 = num_p - r[1];
if(tot2 <= 0) return false;
r1[1] = tot1; r2[1] = 0;
for(int i = 2; i <= n; i++){
if(i % 2){
r2[i] = min(tot2-r2[i-1], r[i]);
r1[i] = r[i] - r2[i];
if(r1[i]+r1[i-1] > tot1) return false;
}else{
r1[i] = min(tot1-r1[i-1], r[i]);
r2[i] = r[i] - r1[i];
if(r2[i]+r2[i-1] > tot2) return false;
}
}
return !r1[n];
}
int main(){
while(scanf("%d", &n) != EOF && n){
int L = 0, R = 0;
for(int i = 1; i <= n; i++){
scanf("%d", &r[i]);
if(i > 1) L = max(L, r[i-1]+r[i]);
R = max(R, r[i]*3);
}
L = max(L, r[1]+r[n]);
if(n == 1){
printf("%d\n", r[1]); continue;
}
if(n % 2){
while(L < R){
int mid = L + (R-L)/2;
if(check(mid)) R = mid;
else L = mid+1;
}
}
printf("%d\n", L);
}
return 0;
}
La 3177
最新推荐文章于 2019-01-16 23:16:12 发布