社区讨论

90分,大佬帮优化一下

P5019[NOIP 2018 提高组] 铺设道路参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@m1soknvg
此快照首次捕获于
2024/10/03 10:32
去年
此快照最后确认于
2025/11/04 18:14
4 个月前
查看原帖
C
#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;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...