papamelong 226. 远征 Expedition(挑战程序设计竞赛)

地址 https://www.papamelon.com/problem/226

你需要驾驶一辆汽车行驶 L 单位距离。

最开始时, 卡车上有 P 单位的汽油。

汽车每开 1 单位距离需要消耗 1 单位的汽油。

如果在途中车上的汽油耗尽, 车就无法继续前行, 因而无法达到终点。

在途中一共有 N 个加油站。第ii 个加油站在距离 终点 A_i单位距离的地方, 最多可以给汽车加 B_i单位汽油。

假设卡车的燃油箱的容量是无限大的。问最少加多少次汽油可以达到终点 ?

无法达到请输出-1。

输入
第一行是 N,表示有多少个加油站
接下来 N 行,每行两个整数 A_i, B_i,表示每个加油站距离 终点 的位置,以及最多可以加多少油
最后一行是 L, P
1≤N≤210^4
1≤L≤10^6
1P10^6
1≤Ai≤L
1≤Bi≤100
输出
一个整数,表示最少加多少次油
样例 1
输入
4
4 4
5 2
11 5
15 10
25 10
输出
2

解答
本题目使用贪心算法,首先在已有的油的情况下,尽可能走远。如果油不足以达到终点或者 下一个点。从已经经过的点中选取一个加油。 由于要求加油次数最小,那么在可选择的加油站中选择可加油最多的站点加油。(同样是加一次油,贪心选择加油最多的站点,这样可以将加油次数的可能降低到最低)

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>

using  namespace std;

priority_queue<pair<int, int>, vector<pair<int, int>>> q;

int n;
const int N = 20010;
pair<int, int> dat[N];
int l, p;

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> dat[i].first >> dat[i].second;
	}
	cin >> l >> p;

	sort(dat,dat+n);

	int currpos = l - p;   
	int ans = 0;
	for (int i = n - 1; i >= 0; i--) {
		if (currpos <= 0) { break; }
		if (currpos <= dat[i].first) {
			q.push({ dat[i].second,dat[i].first });
		}
		else {
			while (currpos > dat[i].first && !q.empty()) {
				currpos -= q.top().first; q.pop(); ans++;
			}
			if (currpos > dat[i].first) { break; }
			else{ q.push({ dat[i].second,dat[i].first }); }
		}
	}


	while (currpos > 0 && !q.empty()) {
		currpos -= q.top().first; q.pop(); ans++;
	}

	if (currpos <= 0) {
		cout << ans<< endl;
	}
	else {
		cout << -1 << endl;
	}
	
	return 0;
}

我的视频题解空间

posted on   itdef  阅读(44)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-08-14 AcWing 1059. 股票买卖 VI Leetcode714. 买卖股票的最佳时机含手续费 dp
2020-08-14 AcWing 1058. 股票买卖 V Leetcode309. 最佳买卖股票时机含冷冻期
2020-08-14 LeetCode 020. 有效的括号 数据结构 栈

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示