题解 | #餐馆#
餐馆
http://www.nowcoder.com/practice/d2cced737eb54a3aa550f53bb3cc19d0
使用的贪心策略,优先将消费最大,占用座位较少的消费者排号就座。
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
int main(){
int64_t n, m;
while(cin >> n >> m){
vector<int64_t> table_max_nums;
while(n--){
int64_t table_num;
cin >> table_num;
table_max_nums.push_back(table_num);
}
sort(table_max_nums.begin(),table_max_nums.end());
vector<pair<int64_t, int64_t>> customs;
while(m--){
int64_t b, c;
cin >> b >> c;
if (b <= table_max_nums.back()){
customs.push_back(make_pair(b, c));
}
}
sort(customs.begin(),customs.end(),
[](pair<int64_t, int64_t> p1, pair<int64_t, int64_t> p2){return p1.second > p2.second;});
int64_t sum_money = 0;
for(auto custom : customs) {
for(auto iter = table_max_nums.begin(); iter != table_max_nums.end(); ++iter){
if(custom.first <= *iter){
sum_money += custom.second;
table_max_nums.erase(iter);
break;
}
}
}
cout << sum_money << endl;
}
return 0;
}