题解 P1478 【陶陶摘苹果(升级版)】

看着你们累死累活得快排、冒泡、结构体特殊冒泡、还有dp...
蒟蒻表示真的不用那么麻烦!


难度:新手村+1
压行情况:0
理解难度:0
首先我们来了解一下优先队列:(自己抄的自己...)
讲元素一个个放进队列里,自动维护(排序),然后抽出来,堆排序过程!
原先的堆排序是要开一个数组来着...


那么我们的思路也很简单:摘最省力气的苹果,然后减啊减,就这个样子...
Code(c++):

#include <iostream>
#include <queue>//优先队列
#include <cstdio>
using namespace std;
priority_queue<int,vector<int>,greater<int> >qwq;
//小根堆,从小到大排序
int main()
{
    int n,s,a,b,h,f,count=0;
    scanf("%d%d%d%d",&n,&s,&a,&b);
    b=a+b;//这是陶陶最大的高度
    for (int i=1;i<=n;i++)
    {
        scanf("%d%d",&h,&f);
        if (h>b||f>s)
        {//如果陶陶没力气摘或者够不着就放弃数据
            continue;
        }
        else
        {如果摘得着就把它的力气值塞进堆里
            qwq.push(f);
        }
    }
    while (s>0&&s>=qwq.top())
    //保证下一个数据能使用,有力气摘
    {//能摘的话就count++,然后把力气值减掉
        s=s-qwq.top();
        count++;
        qwq.pop();
    }
    printf("%d",count);//然后把计数器输出来
    return 0;
}

蒟蒻求过,毕竟秒杀冒泡。。。

猜你喜欢

转载自www.cnblogs.com/jelly123/p/10385947.html
今日推荐