#include<bits/stdc++.h>
using namespace std;
struct node{
int begin,end;
int mlen;
}maxn;
int a[100005];
int n;
int ans=0;
bool flag=0;
void pd2(){//判断是否全部填满
int cnt3=0;
for(int i=1;i<=n;i++){
if(a[i]==0)
cnt3++;
}
if(cnt3==n)
flag=1;
return;
}
void work2(){//更新
if(maxn.mlen!=0){
ans++;//次数加一
for(int i=maxn.begin;i<=maxn.end;i++)
a[i]-=1;
maxn.mlen=0;//初始化
}
return;
}
void scan1(){//扫描第一个最长的字串出现的位置及长度
int cnt2=0;
for(int i=1;i<=n;i++){
if(a[i]!=0)
cnt2++;
else if(a[i]==0&&cnt2!=0){
if(cnt2>maxn.mlen){
maxn.begin=i-cnt2;
maxn.mlen=cnt2;
maxn.end=i;
cnt2=0;
}
}
}
work2();
return;
}
void work1(){//work解决
ans++;
for(int i=1;i<=n;i++)
a[i]=a[i]-1;
return;
}
void pd1(){//判断该选哪套方案
int cnt1=0;
for(int i=1;i<=n;i++)
if(a[i]!=0)
cnt1++;
if(cnt1==n){//如果全是坑
work1();//直接work解决
return;
}
else{
scan1();//如果有填好的,先去扫描
return;
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
maxn.mlen=0;
while(flag!=1){
pd1();
pd2();
}
printf("%d\n",ans);
return 0;
}
求助大神帮忙看看哪里出错误了,万分感谢!!