解题过程中不知道最多能摘多少个的意思,以为按照输入顺序判断,看了题解后才知道需要按照花费力气从小到大排序,而且用普通冒泡排序法会超时。所以get到了快速排序的技能!
#include <cstdio>
int p[2][5001];
void qkst(int l,int r)//快速排序法
{
int i,j,mid;
i=l;j=r;
mid=p[1][(l+r)/2];
while(i<=j){
while(p[1][i]<mid) i++;
while(p[1][j]>mid) j--;
if(i<=j){
int tm=p[1][i];
p[1][i]=p[1][j];
p[1][j]=tm;
int tn=p[0][i];
p[0][i]=p[0][j];
p[0][j]=tn;
i++;j--;
}
}
if(l<j) qkst(l,j);
if(r>i) qkst(i,r);
}
int main()
{
int n,a,s,i=0,b,count=0,x,y;
scanf("%d %d",&n,&s);
scanf("%d %d",&a,&b);
while(n--)
{
scanf("%d %d",&x,&y);
if(a+b>=x)
{
p[0][i]=x;p[1][i]=y;
i++;
}
}
qkst(0,i-1);
for(int j=0;j<i;j++)
{
if(s>=p[1][j])
{
s-=p[1][j];
count++;
continue;
}
if(s<p[1][j]) break;
}
printf("%d",count);
return 0;
}