最小花费(C#)
来源:互联网 发布:手机绿色上网软件 编辑:程序博客网 时间:2024/05/18 01:33
题目描述
在某条线路上有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站的最小花费。
解题思路:
动态规划,首先初始化起始地A到目的地B的所有cost:cost[i]=cost[i-1]+newcost(i-1,i)。它是前一个节点的cost加上当前节点和前一个节点的cost的和。
但是这个cost并非是中的最优解,还需要判断当前节点在满足不换乘的前提下到前面所有节点(除了i-1)的cost。取最小的cost作为A到某个节点的最优解。这是一个动态更新的过程。
private static int query(int[] nums, int A, int B, int[] distancesAndcosts){int[] cost = new int[nums.Length + 1];cost[A] = 0;for (int i = A + 1; i <= B; i++){cost[i] = cost[i-1] + straighfordCost(nums[i] - nums[i-1],distancesAndcosts);int j = i - 2;while (j >= A && (nums[i] - nums[j]) <= distancesAndcosts[2]){if (cost[i] > (cost[j] + straighfordCost(nums[i] - nums[j],distancesAndcosts))){cost[i] = cost[j] + straighfordCost(nums[i] - nums[j], distancesAndcosts);}j--;}}return cost[B];}private static int straighfordCost(int dis,int[] distancesAndcosts){if (dis <= distancesAndcosts[0]){return distancesAndcosts[3];}else{if ((dis <= distancesAndcosts[1])){return distancesAndcosts[4];}else{return distancesAndcosts[5];}}}
0 0
- 最小花费(C#)
- 最小花费
- 最小花费
- 最小花费
- 最小花费
- 最小花费
- 最小花费
- 最小花费
- 最小花费
- 最小花费
- 题目1086:最小花费
- OJ_1086 最小花费
- money 最小花费(spfa)
- 1225: 最小花费
- foj 2197 最小花费
- FZU 2197 最小花费
- 最小花费_ssl2206_dijkstra
- ssl2206 最小花费
- 设计模式(22)------模板方法模式
- 集合_java集合框架
- 实现View 滑动的几种方法
- 设计模式(23)------访问者模式
- Python学习总结(5)-模块和包
- 最小花费(C#)
- Linux相关(Yum源搭建--基于FTP)
- 手把手教你炫酷慕课网视频启动导航的完美实现
- String StringBuilder StringBuffer
- 有关iOS构建版本上传应用
- 百度员工离职总结:如何做个好员工?(严重推荐)
- UML——画图前的准备
- bzoj 1452 [JSOI2009]Count
- 《Java报表之JFreeChart》-第三讲