我感觉我这样做应该也没有错啊!
思路就是走到第i个站点的时候先看看到第i-1个的时候油还够不够第i个,不够就从前面没取的站点中去油最多的一个
如果够就算了
WA 三次了
#include<stdio.h>
#define inf 6000000
int a[100100][2];
int heap[100100],m;
void shiftup(int l)
{
    int i,j,temp;
    temp=heap[l];
    i=l;
    j=i/2;
    while(j>=1)
    {
        if(heap[j]<temp)
        {
            heap[i]=heap[j];
            i=j;
            j/=2;
        }
        else
        {
            heap[i]=temp;
            return ;
        }
    }
    heap[i]=temp;
}
void shiftdown(int l)
{
    int i,j,temp;
    temp=heap[l];
    i=l;
    j=i*2;
    while(j<m)
    {
        if(j+1<m&&heap[j+1]>heap[j]) j++;
        if(heap[j]>temp)
        {
            heap[i]=heap[j];
            i=j;
            j*=2;
        }
        else 
        {
            heap[i]=temp;
            return ;
        }
    }
    heap[i]=temp;
}
int main()
{
    int n,i,j,k;
    int l,p;
    int cnt;
    int flag;
    while(scanf("%d",&n)!=EOF)
    {
        for(i=0;i<n;i++) scanf("%d%d",&a[i][0],&a[i][1]);
        scanf("%d%d",&l,&p);
        cnt=0;
        j=1;
        heap[1]=-1;
        m=2;
        flag=1;
        for(i=n-1;i>=0;i--)
        {
            while(p<l-a[i][0])
            {
                if(heap[1]==-1)
                {
                    flag=0;
                    goto line;
                }
                p+=heap[1];
                heap[1]=-1;
                shiftdown(1);
                cnt++;
            }
            heap[m]=a[i][1];
            shiftup(m);
            m++;
        }
line:;
     if(flag==0) printf("-1\n");
     else printf("%d\n",cnt);
    }
}