海底高铁 前缀和+贪心

有 N N N个城市,每个城市之间有一段铁路,经过两个相邻的城市之间,必须单独购买这一小段的车票,第 i i i段铁路购买纸质单程票需要 A i A_i Ai元,或购买卡,对于第 i i i段铁路,需要花 C i C_i Ci元的工本费购买一张卡,然后乘坐这段铁路一次就只要扣 B i ( B i < A i ) B_i(B_i<A_i) Bi(Bi<Ai)元。现要去 M M M个城市,求最少会花掉多少的钱。

对于每一小段铁路要么全部买纸票,要么全部刷卡。我们需要统计第 i i i段铁路要经过多少次,再比较两者谁便宜。本题数据比较大,需要使用前缀和来统计区间和。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
long long a[100005],b[100005],c[100005],num[100005];
long long ans[100005];
long long sum;
int n,m;
int main()
{
	cin>>n>>m;
	num[0]=0;
	for(int i=1;i<=m;i++)cin>>num[i];
	for(int i=1;i<=n-1;i++)cin>>a[i]>>b[i]>>c[i];
	for(int i=1;i<=m-1;i++)
	{
		int N,M;
		M=max(num[i],num[i+1]);N=min(num[i],num[i+1]);
		ans[N]++;ans[M]--;
	}	
	for(int i=1;i<=n;i++)ans[i]+=ans[i-1];
//	for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
	for(int i=1;i<=n-1;i++)
	sum+=min(a[i]*ans[i],(b[i]*ans[i]+c[i]));
	cout<<sum<<endl;
	cin>>n;
	return 0;
}
相关推荐
June`几秒前
CUDA程序效率如何计算以及工具如何使用
算法·cuda
兰令水4 分钟前
leecodecode【树形DP】【2026.6.11打卡-java版本】
java·算法·深度优先
装不满的克莱因瓶10 分钟前
RLHF中的PPO算法——大语言模型对齐优化的核心引擎
人工智能·python·深度学习·算法·机器学习·语言模型·自然语言处理
梓䈑11 分钟前
C++ 接入 SQLite 数据库:环境搭建、API 详解 与 两种执行方式对比
数据库·c++·sqlite
SWAGGY..32 分钟前
Linux系统编程:(十三)环境变量
java·linux·算法
Black蜡笔小新42 分钟前
自动化AI算法训练服务器DLTM一体化训推平台构建企业专属AI能力中台
人工智能·算法·自动化
zh路西法1 小时前
基于yaml-cpp的C++参数服务器设计2:多级参数配置
linux·服务器·c++
sjsjs111 小时前
力扣3558. 给边赋权值的方案数 I
算法·leetcode·职场和发展
hujinyuan201601 小时前
2025年12月中国电子学会青少年机器人技术等级考试试卷(四级) 真题+答案
算法·机器人
啦啦啦啦啦zzzz1 小时前
算法总结(双指针)
c++·算法·双指针