贪心没错,但不是这样贪的.
下面是我通过的代码:
程序代码:
<BR>/**<BR> &#pku2431.cpp<BR> @author Eastsun<BR> @version 1.0 2007/10/14<BR>*/<BR>#include<iostream><BR>#include<queue><BR>#include<vector><BR>#include<algorithm><BR>#include<functional><BR>using namespace std;</P>
<P>struct Stop{<BR> Stop(int d,int f){<BR> dis =d;<BR> fuel =f;<BR> }<BR> int dis;<BR> int fuel;<BR>};<BR>struct CmpByDis:public binary_function<Stop,Stop,bool>{<BR> bool operator()(const Stop& s1,const Stop& s2)const{<BR> return s1.dis >s2.dis;<BR> }<BR>};<BR>struct CmpByFuel:public binary_function<Stop,Stop,bool>{<BR> bool operator()(const Stop& s1,const Stop& s2)const{<BR> return s1.fuel <s2.fuel;<BR> }<BR>};<BR>int main(){<BR> int n;<BR> cin>>n;<BR> vector<Stop> vec;<BR> for(int i =0;i <n;i ++){<BR> int d,f;<BR> cin>>d>>f;<BR> vec.push_back(Stop(d,f));<BR> }<BR> int dist,fuel,count =0;<BR> cin>>dist>>fuel;<BR> sort(vec.begin(),vec.end(),CmpByDis());<BR> priority_queue<Stop,vector<Stop>,CmpByFuel> queue;<BR> vector<Stop>::iterator itr =vec.begin();<BR> for(;;){<BR> for(;itr!=vec.end()&&fuel>=dist -(*itr).dis;itr ++)<BR> queue.push(*itr);<BR> if(queue.empty()){<BR> cout<<-1<<endl;<BR> break;<BR> }<BR> if(fuel>=dist){<BR> cout<<count<<endl;<BR> break;<BR> }<BR> fuel += queue.top().fuel;<BR> queue.pop();<BR> count ++;<BR> }<BR>}<BR>