[USACO2005OPEN]Expedition

博客探讨了在解决USACO2005OPEN Expedition问题时,如何利用贪心策略和优先队列(堆)来确定最佳路径。当当前油量不足以到达下一个加油站时,需要从之前经过的加油站中选取油量最大的未使用站补充,若所有站都使用过仍无法到达,则输出-1。尽管最初尝试使用sort但超出限制,作者转而采用优先队列实现高效解决方案。
摘要由CSDN通过智能技术生成

贪心+堆/优先队列

如果现在的油量能到达下一个加油站则继续走;否则就要加上之前走过的加油站中油最多没走过的加油站的油,如果前面的所有加油站都加过油了还不能到达下一个加油站输出 -1。

看到要求最大值,第一想到的肯定是 sort。但是!sort 被卡了。

那怎么办呢?这样一来,就想到了堆和优先队列。

#include <bits/stdc++.h>
using namespace std;
struct jyz {
    int wz, yl;
    bool operator<(const jyz& other) const
    {
        return yl < other.yl;
    }//重载运算符,比sort排序还快些
} s[10010];
priority_queue<jyz> q;
int cmp2(jyz x, jyz y)
{
    return x.wz < y.wz;
}
int main()
{
    int n, y, t = 0, x;
    scanf("%d", &n);
    for (int i = n; i >= 1; i--) {
        scanf("%d%d", &s[i].wz, &s[i].yl);
    }//这里倒序不用管
    scanf("%d%d", &x, &y);
    for (int i = 1; i <= n; i++) {
        s[i].wz = x - s[i].wz;
    }//算出离起点的距离
    s[n + 1].wz = x, s[n + 1].yl = 0;//记得
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值