soj 1890. Balls Again

来源:互联网 发布:安徽大学网络教育平台 编辑:程序博客网 时间:2024/05/06 13:19

题意:有N个球,M个瓶子,每个球有分数,每个瓶子有容球上限和容分数上限,这里的容分数上线是其中的每个球都不达到这个上限就行。问最多能容纳多少个球,这些球加起来分数多少。

思路:贪心,分数高的球往分数上限高的瓶子里面扔即可。

#include <cstdio>#include <algorithm>using namespace std;struct Bottle {int c, q;} b[205];bool cmp1(Bottle a, Bottle b) {if (a.q != b.q) return a.q > b.q;return a.c > b.c;}bool cmp2(int a, int b) {return a > b;}int p[205];int n, m, i, j;int ansN, ansP;int main() {while (scanf("%d%d",&n,&m) != EOF) {for (i = 0; i < n; ++ i) scanf("%d",&p[i]);for (i = 0; i < m; ++ i) scanf("%d%d",&b[i].c,&b[i].q);sort(p, p+n, cmp2);sort(b, b+m, cmp1);ansN = ansP = 0;j = 0;for (i = 0; i < n; ++ i) {while (b[j].c == 0) {j ++;if (j >= m) {i = n;break;}}if (p[i] <= b[j].q) {b[j].c --;ansN ++;ansP += p[i];}}printf("%d %d\n", ansN, ansP);}}


原创粉丝点击