海底高铁 前缀和+贪心

有 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;
}
相关推荐
VL——MOESR17 分钟前
【LuoguP1967】货车运输【生成树】【倍增】
c++·算法·题解·倍增·生成树
手写码匠19 分钟前
华为云Flexus+DeepSeek征文|Agent 记忆系统实战:用 DeepSeek-R1/V3 + Dify 会话变量打造跨会话长期记忆
人工智能·深度学习·算法·aigc
草莓熊Lotso36 分钟前
【Linux网络】从0手写Reactor反应堆(二):完善核心细节——ET非阻塞读写、分层架构与回调机制
linux·运维·服务器·网络·c++·tcp/ip·架构
Olafur_zbj38 分钟前
【AI】CUDA编程中的维度
人工智能·算法
cvby1 小时前
C++哈希
c++·哈希算法·散列表
世事如云有卷舒1 小时前
GoogTest测试框架
c++·测试
疯狂打码的少年1 小时前
【数据结构】栈:定义、顺序栈与链式栈
数据结构·笔记
坚持编程的菜鸟1 小时前
模拟实现memcpy
c语言·算法·模拟实现my_memcpy
wabs6661 小时前
关于图论【最短路径之Bellman_ford 算法|卡码网94.城市间货物运输的思考】
数据结构·算法·图论·卡码网·bellman_ford·求最短路径
MrZhao4001 小时前
On-Policy Distillation(OPD):为什么大模型后训练要在学生自己的轨迹上蒸馏?
算法