Skipping题解(贪心,队列,迪杰斯特拉,思维)

news/2025/2/28 15:55:57/文章来源:https://www.cnblogs.com/1747176348mi/p/18618146
  • 原题链接
    https://codeforces.com/problemset/problem/2023/B


 

  • 大致题意
    类似一个游戏游戏规则如下:

    1. 从1开始,可以选择吃掉ai,之后只能选择比当前下标小的(明显,如果开始就选择吃掉a1,那么游戏就结束了)。
    2. 当然还可以选择不吃ai,那么可以跳到[1,b[i]](b[i]与i的大小关系并不确定)。
       
      我们要吃的尽可能多,求最多可以吃多少。

  • 上思路

  这个题的第一个思维特征——贪心, 拿第2个规则来说,可以跳的范围是[1, b[i]], 但是我们应该要跳到b[i]且b[i]>i。  试想如果b[i]<=i,我们大可使用规则1,吃掉ai后,再选择i-1,之后一步一步吃掉编号小的且之前没有跳过的;所以这时用规则1会更划算。
我们可以选择+ai跳到i-1,当b[i]>i时,可以考虑+0跳到b[i];
 
 

  理解了这个小tip以后,可以真正来看关键代码的实现步骤了。
本人很喜欢用队列。
关于这个题,可以说是最短路的思想,也就是优先队列弹出最短的那条边, 但是我稍稍优化了一下。
我们这样考虑, 从1开始,我们负债为0,若b[1]>1,我们跳到b[1]就需要花费a[i],用dis[i]表示从1不断跳跃到达i时需要的最小花费(应该是个负数),sum数组是a[i]的前缀和,sum[i]+dis[i]就表示到达i点时能吃掉的最大量。
当然,有些点可能到不了,所以dis[]初始化为-2e18就可以了。
 
优先队列维护的是当前dis[i]最大的(和最短路差不多), 遍历max(t.x, 上一次跳跃的)到b[t.x]的,若这些有可以跳的更远的,就加入队列。

  • 上代码

#include <bits/stdc++.h>
#define int long longusing namespace std;
const int xmmm=4e5+10;
struct p{int x, y;friend bool operator < (p f1, p f2){return (f1.y<f2.y)||(f1.y==f2.y&&f1.x<f2.x);}
};int a[xmmm], b[xmmm], sum[xmmm];
int dis[xmmm];void bfs(){int l=1, r=0;priority_queue<p>q;q.push(p{(int) 1, dis[1]});while(!q.empty()){p t=q.top();q.pop();if(t.x<=r)continue;l=r, r=t.x;for(int i=l+1;i<=r;i++){if(dis[i]<=dis[t.x]){dis[i]=dis[t.x];if(b[i]>r){if(dis[b[i]]<dis[i]-a[i]){dis[b[i]]=dis[i]-a[i];q.push(p{b[i], dis[b[i]]});}}}}}return ;
}
signed main()
{int T;cin>>T;while(T--){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];dis[i]=-2e18;}for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i];for(int i=1;i<=n;i++)cin>>b[i];dis[(int)1]=0;bfs();int ans=0;for(int i=n;i>=1;i--){ans=max(ans, dis[i]+sum[i]);}cout<<ans<<'\n';}return 0;
}

  • 自我总结
    这个题比较有意思的点就是它暗含了一个迪杰斯特拉的模型,而对这个模型的使用就看自己的理解了。
    第36次ccf csp认证的D题和这个题思考方式相似。
    写了挺久的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/855666.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

arcpy开发初探

是第一次将软件操作和书写代码合二为一 一、配置环境 arcpy是无法pip下载到的,只有满足以下条件才能调用到: 1、运行代码时候需要使用arcgis下面的python做编译器去运行 2、arcmap是需要启动着的 先写个测试代码 import arcpy print(arcpy.GetInstallInfo()[Version]) input_…

2024-2025-1 20241322 《计算机基础与程序设计》第13周学习总结

2024-2025-1 20241322 《计算机基础与程序设计》第13周学习总结 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK13这个作业的目标 《C语言程序设计》第12章并完…

全斗焕小曲 All In One

全斗焕小曲 All In One 挨棍的小曲 / 无限制格斗大赛の小曲 / 全斗焕の小曲 / 跑男の小曲 / 联赛开幕曲全斗焕小曲 All In One挨棍的小曲 / 无限制格斗大赛の小曲 / 全斗焕の小曲 / 跑男の小曲 / 联赛开幕曲demos https://search.bilibili.com/all?keyword=挨棍的小曲 https:/…

【项目学习】Morpho 借贷协议简单调研

项目背景 Morpho blue (下称 Morpho)是一个超额抵押借贷协议。与传统的借贷协议不同,Morpho 无需经过治理批准即可创建任意定制化的借贷市场。用户可以通过指定一项贷款资产、一项抵押资产、清算贷款价值 (LLTV)、预言机和利率模型 (IRM) 等参数来创建一个独立市场。市场创建…

01.大模型起源与发展

知识点注意力机制(Attention)的主要用途是什么?选择重要的信息并忽略不相关的信息Transformer 模型是基于什么理论构建的?C. 注意力机制(Attention)GPT 和 BERT 的主要区别是什么?C. GPT 使用了单向自注意力,而 BERT 使用了双向自注意力在注意力机制中,“Q”、“K”和…

IoTClient---基于C#开源的物联网设备通讯协议客户端

https://github.com/zhaopeiym/IoTClientIoTClient是一个物联网设备通讯协议实现客户端,将包括主流PLC通信读取、ModBus协议、Bacnet协议等常用工业通讯协议。本组件基于.NET Standard 2.0,可用于.Net的跨平台开发,如Windows、Linux甚至可运行于树莓派上。技术架构1. 编码语…

docker基础篇:安装tomcat

docker基础篇:安装tomcat@目录8.Docker常规安装简介8.1 docker常规安装总体步骤8.2安装tomcat本人其他相关文章链接 8.Docker常规安装简介注意点1: 左面是原始的微服务架构,你要自己linux中搭建mysql、redis繁琐费事,右面是使用docker搭建的服务,直接docker run xx启动即可…

脚手架构建

1. 引言 背景介绍: 前端脚手架的目的在于提高前端开发的效率和一致性 ,节约一些重复性工作,例如:编译、打包、代码检查,避免了从零开始搭建项目框架的繁琐工作。 需求分析: 项目创建与初始化:创建新的项目目录结构。 初始化基本的项目文件,如index.html、package.json…

07. 按钮控件

一、按钮控件PySide6 中按钮分为 push 按钮(按压型)、check 按钮(勾选型)和 toggle 按钮(切换型,多个按钮中只有一个可以选中)。其中,push 按钮有 QPushButton 按钮和 QToolButton 按钮,check 按钮是 QCheckBox 按钮,toggle 按钮是 QRadioButton,它们都继承自 QAbas…

opencascade配置笔记

下载occ 网址参考网址 c++引用lib库 参考网址 vs使用qt插件 参考网址 参考网址

大规模可观测性揭秘:Netflix 如何通过标题玩转全球内容发布?

1 导言 在 Netflix,我们每月管理着上千个全球内容发布项目,每年的投资额高达数十亿美元。确保每部影片在我们平台上的成功和可发现性是我们的首要任务,因为我们的目标是将每个故事与合适的受众联系起来,让我们的会员满意。为了实现这一目标,我们致力于建立强大的系统,提…

Netty的高性能之道

一、概述 1.1 惊人的性能数据 最近一个圈内朋友通过私信告诉我,通过使用Netty4 + Thrift压缩二进制编解码技术,他们实现了10W TPS(1K的复杂POJO对象)的跨节点远程服务调用。相比于传统基于Java序列化+BIO(同步阻塞IO)的通信框架,性能提升了8倍多。 事实上,我对这个数据…