数据结构与算法学习笔记----贪心·排序不等式
数据结构与算法学习笔记----贪心·排序不等式
@@ author: 明月清了个风
@@ first publish time: 2025.4.5ps⭐️一道很简单的题,主要是一个思路。
Acwing 913. 排队打水
[原题链接](913. 排队打水 - AcWing题库)
有 n n n个人排队到 1 1 1个水龙头处打水,第 i i i个人装满水桶的所需的事件是 t i t_i ti,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?
输入格式
第一行包含整数 n n n。
第二行包含 n n n个整数,其中第 i i i个整数表示第 i i i个人装满水桶所花费的时间 t i t_i ti。
输出格式
输出一个整数,表示最小的等待时间之和。
数据范围
1 ≤ n ≤ 100000 1 \le n \le 100000 1≤n≤100000,
1 ≤ t i ≤ 10000 1 \le t_i \le 10000 1≤ti≤10000
思路
这一题的思路其实也很简单,根据题意可以知道后面的人要等前面所有人的取水时间,因此要取水快的先打,这样后面等的人等待时间就会更短。
代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 100010;
int n;
int a[N];
int main()
{
cin >> n;
for(int i = 0; i < n; i ++)
cin >> a[i];
sort(a, a + n);
long long res = 0;
int x = n - 1;
for(int i = 0; i < n; i ++)
{
res += a[i] * x;
x --;
}
cout << res << endl;
return 0;
}