比赛 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;
}