用的是递归,思路一般,能跑,但奇怪的就是其他全都ac就只有第5、9、10点wa
#include<iostream>
#include<cstring>
using namespace std;
int d[100010];
int check(int l,int r){
int min=10000;
for(int i=l;i<=r;i++){
if(d[i]==0)return 0;
if(min>d[i])min=d[i];
}
return min;
}
int pu(int l,int r){
if(l==r){
int end=d[l];
d[l]=0;
return end;
}else{
int cnt=0;
int checkResult=check(l,r);
if(checkResult)for(int i=l;i<=r;i++)d[i]-=checkResult;
cnt+=checkResult;
int L=l,R;
while(d[L]==0)L++;
while(1){
R=L;
while(d[R+1]!=0 && R<r)R++;
cnt+=pu(L,R);
L=R+2;
while(d[L]==0)L++;
if(L>r)break;
}
return cnt;
}
}
int main(){
memset(d,-1,sizeof(d));
int n;
cin>>n;
for(int i=0;i<n;i++)cin >> d[i];
cout<<pu(0,n-1);
}