首页 > 试题广场 >

最小花费

[编程题]最小花费
  • 热度指数:10150 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
在某条线路上有N个火车站,有三种距离的路程,L1,L2,L3,对应的价格为C1,C2,C3.其对应关系如下: 距离s           票价 0<S<=L1         C1 L1<S<=L2        C2 L2<S<=L3        C3 输入保证0<L1<L2<L3<10^9,0<C1<C2<C3<10^9。 每两个站之间的距离不超过L3。 当乘客要移动的两个站的距离大于L3的时候,可以选择从中间一个站下车,然后买票再上车,所以乘客整个过程中至少会买两张票。 现在给你一个 L1,L2,L3,C1,C2,C3。然后是A B的值,其分别为乘客旅程的起始站和终点站。 然后输入N,N为该线路上的总的火车站数目,然后输入N-1个整数,分别代表从该线路上的第一个站,到第2个站,第3个站,……,第N个站的距离。 根据输入,输出乘客从A到B站的最小花费。

输入描述:
以如下格式输入数据:
L1  L2  L3  C1  C2  C3
A  B
N
a[2]
a[3]
……
a[N]


输出描述:
可能有多组测试数据,对于每一组数据,
根据输入,输出乘客从A到B站的最小花费。
示例1

输入

1 2 3 1 2 3
1 2
2
2

输出

2
头像 philos
发表于 2021-02-05 20:38:08
思路 题干有点混乱,稍微整理一下: 距离 s 票价 用 dp[j] 表示从第 i 站买票到第 j 站的最小花费,则 dp[j] 等于从前面的某个站到第 j 站花费的最小值。 #include<iostream> #include<vector&g 展开全文
头像 CserDu
发表于 2022-02-02 17:50:02
线性逆序dp f[i]表示从i站出发到达终点站的花费,那么从i站有3种选择: 1、买票1 2、买票2 3、买票3 假设买了其中一种票,到达了j站(j>i),那么f[i]=票的价格+f[j]。 注意,ij站之间的距离小于等于l3,因为一张票可以走的最大距离就是l3. 按照上述思路,从后向前递推即 展开全文
头像 高鑫_实习
发表于 2024-06-06 01:02:44
#include <bits/stdc++.h> using namespace std; int main() { int L1, L2, L3, C1, C2, C3, A, B, N; while (cin >> L1 >> L2 >> 展开全文
头像 子豪不自豪
发表于 2023-12-28 19:10:50
#include <math.h> #include <stdio.h> //dp[i] = min{dp[i-1]+(i到i-1之间的合适的价位)...dp[i-n]+(i到i-n之间合适的价位)} //dis[i] - dis[i-n]<l3 //把握好一旦距离超 展开全文
头像 陶良策
发表于 2025-02-28 18:04:45
#include <iostream> #include<vector> using namespace std; int caculatecost(int distance, int L1, int L2, int L3, int C1, int C2, int C3) 展开全文
头像 陶良策
发表于 2025-02-28 18:54:52
#include <iostream> #include<vector> using namespace std; int caculatecost(int distance, int L1, int L2, int L3, int C1, int C2, int C3) 展开全文
头像 OneCodePig
发表于 2025-03-28 21:57:26
定义dp数组,dp[i]表示到达以第i个地点结尾的最小花费初始化dp数组的值为Integer.MAX_VALUE,表示地点不可达dp[A]=0,初始化起点的花费为0依次枚举以第i个地点结尾的最小花费,枚举第i个地点前面的地点并且距离小于等于L3并且地点可达的j地点 import java.util. 展开全文
头像 无限恒星
发表于 2024-05-13 16:09:17
/* 这题,评论区的答案都没我写得好 */ #include <iostream> #include <vector> #include <climits> using namespace std; int L1, L2, L3, C1, C2, C3; int 展开全文
头像 程昱同学
发表于 2023-01-20 13:34:36
#include <climits> #include <iostream> #include <vector> using namespace std; vector<int> dis; int main() { //处理一下输入,有三种距离 展开全文
头像 886rtxz
发表于 2023-08-02 13:02:24
#include <climits> #include <iostream> #include <vector> using namespace std; int l1, l2, l3, c1, c2, c3; int way(int i){ if(i& 展开全文