由于分类的关系强行开个新帖。。
C有内存加成,1040KB->980KB。暂时Rank 8.
题解参见:
http://blog.csdn.net/huanghongxun/article/details/50759196
#include <stdio.h>
#define min(i,j) ((i)<(j)?(i):(j))
#define max(i,j) ((i)>(j)?(i):(j))
#define FOR(i,j,k) for(i=j;i<=k;i++)
int main() {
static int a[20001], ma[20001], mi[20001];
int n, i, ans = 0, l, r, mid;
scanf("%d", &n);
FOR(i,1,n) scanf("%d", a + i);
FOR(i,2,n) ans = max(ans, a[i] + a[i - 1]);
l = ans, r = ans * 2;
while (l <= r) {
mid = l + r >> 1; ma[1] = mi[1] = a[1];
FOR(i,2,n)
ma[i] = min(a[i], a[1] - mi[i - 1]),
mi[i] = max(0, a[i] - (mid - a[i - 1] - (a[1] - ma[i - 1])));
if (!mi[n]) r = mid - 1; else l = mid + 1;
}
printf("%d", l);
return 0;
}