有 n 个人排队到 1个水龙头处打水,第 i 个人装满水桶所需的时间是 t i,请问如何安排他们的打水顺序才能使所有人的等待时间之和最小?
输入格式
第一行包含整数 n。
第二行包含 n个整数,其中第 i个整数表示第 i个人装满水桶所花费的时间 t i
输出格式
输出一个整数,表示最小的等待时间之和。
数据范围
思路
将时间按照从小到大的顺序排队,总时间最小
证明:反证法
代码
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int N = 100010; int a[N], n; int main() { scanf("%d", &n); for (int i = 0; i < n; ++i) { scanf("%d", &a[i]); } sort(a, a + n); LL res = 0; for (int i = 0; i < n; ++i)res += a[i] * (n - i - 1); cout << res << endl; return 0; }