滴滴出行 餐馆

来源:互联网 发布:软件开发系统架构 编辑:程序博客网 时间:2024/04/26 20:52
题目描述

某餐馆有n张桌子,每张桌子有一个参数:a 可容纳的最大人数; 有m批客人,每批客人有两个参数:b人数,c预计消费金额。 在不允许拼桌的情况下,请实现一个算法选择其中一部分客人,使得总预计消费金额最大

#include <stdio.h>#include <algorithm>#include <vector>#include <queue># define f(i,m,n) for(int i=m; i<=n; i++)# define sf(x) scanf("%d", &x)using namespace std;typedef long long int ll;struct cus {int m, b;};struct cmp {bool operator()(cus a, cus b) {return a.m < b.m;}};int _cmp(cus a, cus b) {return a.b < b.b;}priority_queue<cus, vector<cus>, cmp> q;int a[500010];cus b[500010];int main() {int n, m;sf(n);sf(m);f(i, 1, n) sf(a[i]);while (!q.empty())q.pop();ll sum = 0;f(i, 1, m) {sf(b[i].b);sf(b[i].m);}sort(a + 1, a + 1 + n);sort(b + 1, b + 1 + m, _cmp);int j = 1;f(i, 1, n) {for (; j <= m;  j++) if (a[i] >= b[j].b) q.push(b[j]);else break;if (q.empty()) continue;else {sum = sum + q.top().m;q.pop();}}printf("%lld", sum);return 0;}


原创粉丝点击