建议加强数据
查看原帖
建议加强数据
672534
Field_Mouse楼主2023/10/18 19:53

看到这题有点像校内膜你赛的弱化版,就用我赛时的代码改了改交上,发现能过。

#include<bits/stdc++.h>
#define AC return 0;
#define sc(n) scanf("%lld",&(n))
#define pr(n) printf("%lld",(n))
#define hh puts("")
#define kg printf(" ")
#define N 114514
#define int long long 
using namespace std;
int n,d[N],ans;
void sol(int l,int r)
{
	if(l>r)return ;
	if(l==r){ans+=d[r];/*cout<<l<<" "<<r<<endl;*/return;}
	//cout<<l<<" "<<r<<endl;
	int id,minn=114514;
	for(int i=l;i<=r;i++)
	{
		if(d[i]<minn)
		{
			minn=d[i];
			id=i;
		}
	}
	ans+=minn;
	for(int i=l;i<=r;i++)
	{
		d[i]-=minn;
	}
	sol(l,id-1);sol(id+1,r);
}
signed main()
{
	sc(n);
	
	for(int i=1;i<=n;i++)
	{
		sc(d[i]);
	}
	sol(1,n);
	pr(ans);
	AC
}

复杂度上界是 O(n2)O(n^2) 的,会被有序的序列卡飞(但校内模拟也没人卡

hack数据:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	freopen(".out","w",stdout);
	printf("100000\n");
	for(int i=1;i<=100000;i++)
	{
		printf("%d ",i);
	}
	return 0;
}
2023/10/18 19:53
加载中...