90分,大佬帮优化一下
查看原帖
90分,大佬帮优化一下
1423008
Zzy20060323楼主2024/10/3 10:31
#include<stdio.h>
#include<stdlib.h>
int n, ans = 0;
int a[100005];
struct road
{
	int d;
	int num;
}p[100005];
int cmp(struct road* a, struct road* b)
{
	return a->d - b->d;
}
int mins(int begin, int end)
{
	struct road p1[100005];
	for (int i = begin; i <= end; i++)
	{
		p1[i].d = p[i].d;
		p1[i].num = p[i].num;
	}
	qsort(p1 + begin, end - begin + 1, sizeof(struct road), cmp);
	return p1[begin].num;
}
void dg(int begin, int end)
{
	if (begin > end)
	{
		return;
	}
	int mid = mins(begin, end);
	ans += p[mid].d;
	int k = p[mid].d;
	for (int i = begin; i <= end; i++)
	{
		p[i].d -= k;
	}
	dg(mid + 1, end);
	dg(begin, mid - 1);
}
int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &p[i].d);
		p[i].num = i;
	}
	dg(1, n);
	printf("%d", ans);
	return 0;
}
2024/10/3 10:31
加载中...