【滴滴】餐馆
2017-09-04 12:51
344 查看
某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大
//一开始用的暴力的方法,超时;后来参考别人的思路:用multimap存放桌子,先将客人按消费金额从大到小排序,同样金额
//的再按照人数从小到大进行排序,然后客人选择合适的桌子时用二分法(消费金额最多,人数最少的客人优先选择)
//一开始用的暴力的方法,超时;后来参考别人的思路:用multimap存放桌子,先将客人按消费金额从大到小排序,同样金额
//的再按照人数从小到大进行排序,然后客人选择合适的桌子时用二分法(消费金额最多,人数最少的客人优先选择)
#include<iostream> #include<vector> #include<map> #include<functional> #include<algorithm> using namespace std; //按金额从大到小排序,相同消费金额的按人数从小到大排序 bool cmp(const pair<int, int> &left, const pair<int, int> &right) { if (left.second == right.second) return left.first<right.first; else if (left.second<right.second) return false; else return true; } int main() { int n, m; while (cin >> n >> m) { multimap<int, int> table; vector<pair<int, int> > guest(m); for (int i = 0; i < n; i++) { int tmp; cin >> tmp; table.insert(make_pair(tmp,1)); } for (int i = 0; i < m; i++) cin >> guest[i].first >> guest[i].second; sort(guest.begin(), guest.end(), cmp); long long max_consum = 0; int k = 0; for (int i = 0; i<m; i++) { auto itr = table.lower_bound(guest[i].first); if (itr != table.end()) { max_consum += guest[i].second; table.erase(itr); } } cout << max_consum << endl; } }
相关文章推荐
- 滴滴校招 餐馆最大收益问题
- 滴滴内推题-餐馆
- 名企笔试:滴滴出行2017秋招笔试(餐馆消费问题)2017-03-06 算法爱好者
- 滴滴出行 餐馆
- 青岛各饭店餐馆订餐电话大全
- 2008情人节餐馆!2008情人节送什么!
- [双语阅读]伦敦餐馆出绝招 餐费随你付多少
- IT餐馆—第三回 模式
- 滴滴心血化彩虹——记县首届名师邓四喜
- IT餐馆—第十回 潜伏
- IT餐馆—第十四回 架构
- IT餐馆—第十八回 祭奠
- IT餐馆—第二十二回 控件
- 关掉linux文本模式下的滴滴声
- 餐馆联邦一次运行的时间推进序列 (按时间排序的时间推进请求和time grant序列)
- 餐馆那些事之:Mediator Pattern
- 其作者制作的多媒体结晶 滴滴影音(ddPlayer)
- C语言编程——餐馆点菜
- 课程设计之餐馆订餐系统
- 微信上线6.1版 能搜索附近餐馆