申请添加题解
查看原帖
申请添加题解
1381314
hapihapi楼主2024/8/25 22:04

申请提交题解,递归分治的方法

#include<bits/stdc++.h>
using namespace std;
int a[100001];
int ans;
void finish(int s,int t,int dep){
	if(s==t){
		ans+=a[s]-dep;
		return;
	}
	if(s>t){
		return;
	}
	int mi=10001;
	vector<int> cnt;
	for(int i=s;i<=t;i++){
		if(mi>a[i]){
			mi=a[i];
			cnt.clear();
			cnt.push_back(i);
		}
		else if(mi==a[i]){
			cnt.push_back(i);
		}
	} 
	ans+=mi-dep;
	int rs=s;
	for(int i=0;i<cnt.size();i++){
		finish(rs,cnt[i]-1,mi);
		rs=cnt[i]+1;
	}
	finish(rs,t,mi);
	return;
}
int main(){
	int n,mi;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	finish(1,n,0);//起点 终点  
	cout<<ans;
	return 0;
}
2024/8/25 22:04
加载中...