纪中集训2020.01.14【NOIP普及组】模拟赛C组总结——————小球

博客回顾了NOIP普及组模拟赛中关于小球的问题,指出初看简单实则需要巧妙解决。博主分享了问题背景、题目要求,并解释了使用贪心算法而非背包策略的高效解决方案。通过排序和双层循环实现最大分数和球数的求解,提供了AC Pascal和C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

纪中集训2020.01.14【NOIP普及组】模拟赛C组总结——————小球

2.小球
太棒了吧!乍一看水题,再一看淼题,最后瞅一眼,不对!WHAT! 背包还是贪心呀?然后陷入困境的我再无力翻身!终于打了半天背包,拿到了20分

————————华丽的分割线———————

言归正传

2.小球

题目大意:Description
  给定n个不同颜色的球,每个球都有一个分数,同时有m个瓶子,每个瓶子都有固定的容量。现在,你必须把球放到瓶子里面。请编程计算最多能放多少个球到这些瓶子里。
Input
  输入包含多组数据。
  每组数据的第一行为两个整数n, m,分别表示球的个数和瓶子的个数。
  接下来的n行,每一行包含一个整数p,表示相应的球的分数。
  接下来的m行,每一行包含两个整数c和q, 分别表示每个瓶子的容量(最多能装多少个球)和分数上界(放进该瓶子的每个球的分数都不能超过p)。
  当输入n,m均为0时,表示输入结束。
Output
  对于每组数据,输出两个整数B和S,分别表示总共能放进瓶子里的球的最大数目,以及在这个前提下,放进瓶子里面的所有球的最大分数总和。B和S以空格隔开,每组答案独占一行。
Sample Input
2 1
2
3
1 2
2 2
4
5
2 4
2 5
0 0
Sample Output
1 2
2 9

巨佬们这套题的第三题???这么水!!!你居然用背包,~~没带脑子吧!
~~简单贪心就能AC呀!
分析:其实真的很简单,两个sort就行,一个排,球的分数,另一个排瓶子的容量和分数,然后贪心。都从大到小排,然后正着搜索双FOR 不会爆,尽量装,别忘了,可能有一个都装不下的瓶子!

附上AC Pascal代码:

var
        a,b,c:array[0..1000005]of longint;
        i,n,j,m,ans,sum:longint;
procedure qsorta(l,r:longint);
var
        i,j,mid,t:longint;
begin
        i:=l;
        j:=r;
        mid:=a[(i+j) shr 1+1];
        repeat
                while a[i]<mid do
                begin
                        inc(i);
                end;
                while a[j]>mid do
                begin
                        dec(j);
                end;
                if i<=j then
                begin
                        t:=a[i];
                        a[i]:=a[j];
                        a[j]:=t;
                        inc(i);
                        dec(j);
                end;
        until i>j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值