730题目 思路
先把题目的条件列出来,无论下一个高度怎么样,都有e=e*2-h[i]
然后最小值或最大值 //就可以知道是枚举(二分,bfs,dp,贪心)
再然后注意细节,e不能<0 || >1e5
#include<iostream>
#include<cstdio>A
#include<algorithm>
using namespace std;
const int N=100010;
int h[N];
int n;
bool check(int e)
{
for(int i=0;i<n;i++)
{
e=e*2-h[i];
if(e>1e5) return true;
if(e<0) return false;
}
return true;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++) scanf("%d",&h[i]);
int l=0,r=1e5;
while(l<r)
{
int mid=l+r>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
printf("%d\n",l);
return 0;
}