题目:排队打水
分析
题意,所有人等待时间之和最小。
当第一个人打水,后面所有人都在等待。
贪心:要让所有人等待时间之和最小,每次都得取最小。
三种存储方式均可以,目的使每次都能取最小就好:
- 1.vector数组,sort排序
- 2.multiset 自动排序
- 3.priority_queue<int,vector<int>,greater<int>> 小根堆
代码
cpp
#include<bits/stdc++.h>
using namespace std;
multiset<int> s;
int main() {
int n;
cin >> n;
for(int i = 0; i < n; i ++) {
int x; cin >> x;
s.insert(x);
}
long long res = 0;
for(int i = 1; i < n; i ++) {
set<int>::iterator it = s.begin();
res += (*it)*(n-i);
s.erase(s.begin());
}
cout << res << endl;
return 0;
}