(洛谷P34060):海底高铁—->差分数组,贪心思想

news2024/11/26 2:48:34

海底高铁

题目描述

该铁路经过 N N N 个城市,每个城市都有一个站。不过,由于各个城市之间不能协调好,于是乘车每经过两个相邻的城市之间(方向不限),必须单独购买这一小段的车票。第 i i i 段铁路连接了城市 i i i 和城市 i + 1 ( 1 ≤ i < N ) i+1(1\leq i<N) i+1(1i<N)。如果搭乘的比较远,需要购买多张车票。第 i i i 段铁路购买纸质单程票需要 A i A_i Ai 博艾元。

虽然一些事情没有协调好,各段铁路公司也为了方便乘客,推出了 IC 卡。对于第 i i i 段铁路,需要花 C i C_i Ci 博艾元的工本费购买一张 IC 卡,然后乘坐这段铁路一次就只要扣 B i ( B i < A i ) B_i(B_i<A_i) Bi(Bi<Ai) 元。IC 卡可以提前购买,有钱就可以从网上买得到,而不需要亲自去对应的城市购买。工本费不能退,也不能购买车票。每张卡都可以充值任意数额。对于第 i i i 段铁路的 IC 卡,无法乘坐别的铁路的车。

Uim 现在需要出差,要去 M M M 个城市,从城市 P 1 P_1 P1 出发分别按照 P 1 , P 2 , P 3 , ⋯   , P M P_1,P_2,P_3,\cdots,P_M P1,P2,P3,,PM 的顺序访问各个城市,可能会多次访问一个城市,且相邻访问的城市位置不一定相邻,而且不会是同一个城市。

现在他希望知道,出差结束后,至少会花掉多少的钱,包括购买纸质车票、买卡和充值的总费用。

输入格式

第一行两个整数, N , M N,M N,M

接下来一行, M M M 个数字,表示 P i P_i Pi

接下来 N − 1 N-1 N1 行,表示第 i i i 段铁路的 A i , B i , C i A_i,B_i,C_i Ai,Bi,Ci

输出格式

一个整数,表示最少花费

样例 #1

样例输入 #1

9 10
3 1 4 1 5 9 2 6 5 3
200 100 50
300 299 100
500 200 500
345 234 123
100 50 100
600 100 1
450 400 80
2 1 10

样例输出 #1

6394

提示

2 2 2 3 3 3 以及 8 8 8 9 9 9 买票,其余买卡。

对于 30 % 30\% 30% 数据 M = 2 M=2 M=2

对于另外 30 % 30\% 30% 数据 N ≤ 1000 , M ≤ 1000 N\leq1000,M\leq1000 N1000M1000

对于 100 % 100\% 100% 的数据 M , N ≤ 1 0 5 , A i , B i , C i ≤ 1 0 5 M,N\leq 10^5,A_i,B_i,C_i\le10^5 M,N105Ai,Bi,Ci105

##主要思想:
明确每段区间(城市i->i+1)经过次数。
举例:1->3,经过城市车站123;1->4,经过城市1234,包含了1->3;1->5,经过城市12345,包含1->3;那么从1->3可以不用办理三次工本费,办理一次即可;而不管是哪段城市都要付车票,要么纸质车票要么充值IC卡,只是工本费并不是每个区间都需要付,这是问题的核心。
在这里插入图片描述
在这里插入图片描述

下面展示一些 内联代码片

// An highlighted block
var foo = 'bar';

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
long long a[maxn],b[maxn],c[maxn];
int route[maxn],passnum[maxn];
//这里没有创建差分数组,由于passnum初始均为0,passnum既做原数组又做差分数组
//route表示路径中经过的车站(1->M-1),passnum[i]表示从i->i+1经过的次数,即最终数组
int main()
{
    //第一步:输入
    int N,M;cin>>N>>M;//N个城市,M个访问
    for(int i=1;i<=M;++i)
        cin>>route[i];//举例3 1 4 1 5 9 2 6 5 3
    
    for(int i=1;i<=N-1;++i)//9个城市,9-1段
        cin>>a[i]>>b[i]>>c[i];//举例200 100 50
    
    //第二步:利用差分数组对经过的区间车站(i->i+1)的经过次数加1
    for(int i=1;i<=M-1;++i)//思考这里为什么是M-1
    {
        passnum[min(route[i],route[i+1])]+=1;
        passnum[max(route[i],route[i+1])]-=1;
    }
    
    //第三步:对差分数组求前缀和得到最终数组
    //原数组passnum[maxn]最开始全为0,经过差分求前缀和得到新的原数组
    for(int i=1;i<=N-1;++i)//思考这里为什么是N-1? i=8时 表示城市8->城市9
    {
        passnum[i]=passnum[i-1]+passnum[i];
    }
    
    //第四步:遍历最终表示经过次数的数组
    //for(int i=1;i<=N-1;++i)
    //    cout<<passnum[i];
    
    //第五步:比较某段区间哪种方案更实惠 注意答案也应该为longlong
    //纸质票价*某段区间经过次数---IC卡票价*某段区间经过次数+一次工本费
    //贪心思维:每次都选择最优惠的方案 得到的最终答案即最少花费
    long long answer=0;
    for(int i=1;i<=N-1;++i)
    {
        answer+=min(a[i]*passnum[i],b[i]*passnum[i]+c[i]);
    }
    cout<<answer;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测

分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测 目录 分类预测 | Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量机数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现PSO-LSSVM粒子群算法优化最小二乘支持向量…

掌握 C# 爬虫技术:使用 HttpClient 获取今日头条内容

摘要/导言&#xff1a; 在本文中&#xff0c;我们将探讨如何使用 C# 中的 HttpClient 类和爬虫代理IP技术来获取今日头条的内容。我们还将实现多线程技术&#xff0c;以提高数据采集的效率。 背景/引言&#xff1a; 随着信息时代的到来&#xff0c;数据已经成为了一种非常宝…

Leetcode110_平衡二叉树

1.leetcode原题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 2.题目描述 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;…

机器学习machine learning

1. 概念 机器学习是从数据中提取知识。涉及统计学和人工智能&#xff0c;也被称为预测分析或统计学习。 应用领域非常广泛&#xff0c;用户习惯预测&#xff0c;个性推荐&#xff0c;分析DNA序列等等。 机器学习优势是将决策过程自动化&#xff0c;需要涉及较好的算法。如果…

如何打造高度柔性动态的智能仓储物流解决方案?

近年来&#xff0c;仓储物流行业步入自动化系统集成时代&#xff0c;以货架为存储主体的方式逐步发展成为了自动化储方式&#xff0c;核心设备也由货架转变为机器人货架&#xff0c;形成系统集成物流存储体系。河北沃克根据客户需求精准发力&#xff0c;推出了新一代海格里斯智…

九招!教做出立体感十足的地图组件,不服?还有谁

一、立体感地图在可视化大屏中的作用 在可视化大屏中&#xff0c;立体感十足的地图组件可以起到以下作用&#xff1a; 引导用户注意力&#xff1a;立体感的地图组件可以吸引用户的注意力&#xff0c;使其更加关注地图所代表的信息和数据。通过增加立体感&#xff0c;地图组件可…

Spring Security——08,自定义失败处理

自定义失败处理 一、自定义实现类1.1 实现AccessDeniedHandler1.2 实现AuthenticationEntryPoint 二、配置SpringSecurity三、测试3.1 认证失败3.2 权限不足 一键三连有没有捏~~ 我们还希望在认证失败或者是授权失败的情况下也能和我们的接口一样返回相同结构的json&#xff0c…

SpringBoot3整合RabbitMQ之二_简单队列模型案例

SpringBoot3整合RabbitMQ之二_简单队列模型案例 文章目录 SpringBoot3整合RabbitMQ之二_简单队列模型案例1. 简单队列模型1. 消息发布者1. 创建简单队列的配置类2. 发布消费Controller 2. 消息消费者3. 输出结果 1. 简单队列模型 简单队列模型就是点对点发布消息&#xff0c;有…

基于spring boot的社区医院管理服务系统

基于spring boot的社区医院管理服务系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开…

【MySQL】数据库开篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 本系列传送门 1. 什么是数据库&#xff1f; 2. 为什么使用数据库 3. 数据库的分类 4. NoSQL 与关系…

Python实现对一个IP地址和端口号列表进行nmap扫描

一.功能目的 使用python实现对一个IP地址和端口号列表进行nmap扫描 二.功能调研 根据查找得知我们需要用到python的subprocess库 1.代码示例 以下是搜到的简单的subprocess库代码 import subprocess result subprocess.run([ls, -l], capture_outputTrue, textTrue) …

使用Code开发Django_模版和CSS

转到定义 和 查看定义 在使用Django或任何其他库的过程中,我们可能需要检查这些库中的代码。VS Code提供了两个方便的命令,可以直接导航到任何代码中的类和其他对象的定义: 转到定义 在Python开发环境中,我们可以轻松地对函数、类或者其他导入模块中的成员使用“Go to Def…

嵌入式学习50-单片机3

知识散记&#xff1a; 1. xdata 开到扩展内存 2.memcpy 内存拷贝 1、什么是并行通信、串行通信&#xff1f; 并行通信&#xff1a; …

DS18B20与单片机的通信、DS18B20采集温度、MODBUS协议、练习框架

我要成为嵌入式高手之4月9日51单片机第四天&#xff01;&#xff01; ———————————————————————————— DS18B20温度传感器 单总线数字温度计 异步的半双工的串行通信 测量范围从-55℃ ~ 125℃&#xff0c;增量值为0.5℃ 要用DS18B20采集温度&am…

远程控制软件免费

远程控制软件免费&#xff1a;选择、价值与安全性探讨 随着科技的进步和互联网的普及&#xff0c;远程控制软件在日常生活和工作中的应用越来越广泛。这类软件允许用户通过网络远程访问和控制另一台计算机&#xff0c;为远程办公、技术支持和在线教育等提供了极大的便利。本文…

Java中双重检查锁(double checked locking)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 双重检查锁&#x…

电脑硬件 - 内存

内存&#xff0c;是一台电脑的CPU与硬盘间数据交互的中转站。不稳定的内存时常会导致蓝屏&#xff0c;黑屏&#xff0c;死机&#xff0c;甚至电脑无法亮机。 在电脑工作中&#xff0c;CPU和硬盘间无时无刻地进行着大量的数据交互。为了保证软件流畅正常运行&#xff0c;会在中…

大厂Java笔试题之与7有关的数

题目&#xff1a;输出 1到n之间 的与 7 有关数字的个数。 一个数与7有关是指这个数是 7 的倍数&#xff0c;或者是包含 7 的数字&#xff08;如 17 &#xff0c;27 &#xff0c;37 ... 70 &#xff0c;71 &#xff0c;72 &#xff0c;73...&#xff09; 比如输入20&#xff0c;…

游戏测试审表流程

备注:本文为博主原创文章,未经博主允许禁止转载。如有问题,欢迎指正。 个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力) 笔记目录:笔记本~笔记目录_airtest和selenium那个好用-CSDN博客 个人随笔:工作总结随笔_8、以前工作中都接触过哪…

【黑马头条】-day06自媒体文章上下架-Kafka

文章目录 今日内容1 Kafka1.1 消息中间件对比1.2 kafka介绍1.3 kafka安装及配置1.4 kafka案例1.4.1 导入kafka客户端1.4.2 编写生产者消费者1.4.3 启动测试1.4.4 多消费者启动 1.5 kafka分区机制1.5.1 topic剖析 1.6 kafka高可用设计1.7 kafka生产者详解1.7.1 同步发送1.7.2 异…