社区讨论
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 条回复,欢迎继续交流。
正在加载回复...