P5019 [NOIP2018 提高组] 铺设道路
题目传送门
讲解:
这个题可以用递归:
主要思路:找中间点
#include<bits/stdc++.h>
using namespace std;
long long n,a[100005];
int f(int l,int r){
if(l>r) return 0;
int p=l;
for(int i=l;i<=r;i++) if(a[i]<a[p]) p=i;
int num=a[p];
for(int i=l;i<=r;i++) a[i]-=num;
return num+f(l,p-1)+f(p+1,r);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cout<<f(1,n);
return 0;
}