我感觉我这样做应该也没有错啊!
思路就是走到第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);
}
}