| 比赛 | 20251019新安模拟赛1 | 评测结果 | AAAAAAAAWW | 
    | 题目名称 | 铺设道路 | 最终得分 | 80 | 
    | 用户昵称 | 牛烧 | 运行时间 | 0.052 s | 
    | 代码语言 | C++ | 内存使用 | 3.71 MiB | 
    | 提交时间 | 2025-10-19 10:28:04 | 
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,d[10005],ans=0;
void jian(int a,int b)
{
	if(a>b) return ;
	if(a==b)
	{
		ans+=d[a];
		d[a]=0;
		return ;
	}
	vector<int> vis;
	int mn=1e9;
	for(int i=a;i<=b;i++)
	{
		mn=min(mn,d[i]);
	}
	ans+=mn;
	for(int i=a;i<=b;i++)
		d[i]=d[i]-mn;
	for(int i=a;i<=b;i++)
	{
		if(d[i]==0) vis.push_back(i);
	}
	if(!vis.empty())
	{
		jian(a,vis[0]-1);
			for(int i=1;i<vis.size();i++)
		{
			
			jian(vis[i-1]+1,vis[i]-1);
		}
		jian(vis.back()+1,b);
	}
}
int main()
{
	freopen("2018road.in","r",stdin);
	freopen("2018road.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>d[i];
	jian(1,n);
	cout<<ans;
	return 0;
}