poj 2431 Expedition (贪心)

传送门

解题思路

  用堆贪心,每次能走就走,不能走从大根堆里取出以前加进去的油量并更新答案。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>

using namespace std;
const int MAXN = 10005;

inline int rd(){
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}
	while(isdigit(ch))  {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
	return f?x:-x;
}

int n,l,p,ans,oil;
struct Data{
	int dis,w;
	friend bool operator<(const Data A,const Data B){
		return A.dis>B.dis;
	}
}data[MAXN];
priority_queue<int> Q;

int main(){
	n=rd();
	for(int i=1;i<=n;i++)
		data[i].dis=rd(),data[i].w=rd();
	sort(data+1,data+1+n);data[n+1].dis=0;
	l=rd();p=rd();int res=p;
	for(int i=1;i<=n+1;i++){
		data[i].dis=l-data[i].dis;
		int DIS=data[i].dis-data[i-1].dis;
		if(DIS<=res) {res-=DIS;Q.push(data[i].w);continue;}
		while(Q.size()){
			ans++;res+=Q.top();Q.pop();
			if(res>=DIS) break;
		}
		if(!Q.size() && res<DIS) {puts("-1");return 0;}
		res-=DIS;Q.push(data[i].w);
	}
	cout<<ans;
	return 0;
}
posted @   Monster_Qi  阅读(89)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)
点击右上角即可分享
微信分享提示