看着你们累死累活得快排、冒泡、结构体特殊冒泡、还有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;
}
蒟蒻求过,毕竟秒杀冒泡。。。