K站中转站内最便宜的航班

2023-10-18 23:40
文章标签 航班 便宜 中转站

本文主要是介绍K站中转站内最便宜的航班,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

方法一:dfs+减枝

方法二:动态规划

基础知识补充:const和constexpr的区别


题目出处:https://leetcode-cn.com/problems/cheapest-flights-within-k-stops/

方法一:dfs+减枝

思路:用vector<vector<pair<int, int>>> 记录下有向带权图。从起点开始进行深度优先遍历。

  1. 最多经过k个中转站,可以转化为最多经过k+1个城市。
  2. 使用站点数和每次的花费进行减枝。
class Solution {
private:int ans = INT_MAX;    
public:void dfs(int node, int& end, int& k, int count, int price, vector<vector<pair<int,int>>>& graph, vector<bool>& vis){if(node == end && count <= k){ans = min(ans, price);return;  }for(auto & [neibor, w] : graph[node]){if(count > k || price > ans){continue;}if(!vis[neibor]){vis[neibor] = true;dfs(neibor, end, k, count+1, price+w, graph, vis);vis[neibor] = false;  }}}int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {vector<bool> vis(n, false);vector<vector<pair<int, int>>> graph(n);for(auto & flight : flights){graph[flight[0]].push_back({flight[1], flight[2]});}int count = 0; int price = 0;int step = k+1;dfs(src, dst, step, count, price ,graph, vis);if(ans == INT_MAX){ans = -1; } return ans;}
};

方法二:动态规划

思路:f[t][i]表示通过恰好t次航班,从出发城市src到城市i需要的最小花费,显然max(t) = k+1。

状态转移:  f[t][i]=min{ f[t-1][j] + cost(j,i) },其中(j,i)是j到i的一条边、属于flights

结果:题中要求最多只能有k个中转站,也就是最多搭乘k+1次航班,所以最终的答案是max{f[1[dst], f[2][dst], ..., f[k+1][dst]}

class Solution {
private:static constexpr int INF = 10000 * 101 + 1; 
//根据题目中给出的数据范围,航班的花费不超过 10^4,最多搭乘航班的次数不超过101public:int findCheapestPrice(int n, vector<vector<int>>& flights, int src, int dst, int k) {vector<vector<int>> f(k + 2, vector<int>(n, INF));f[0][src] = 0;for (int t = 1; t <= k + 1; ++t) {for (auto&& flight: flights) {int j = flight[0], i = flight[1], cost = flight[2];f[t][i] = min(f[t][i], f[t - 1][j] + cost);}}int ans = INF;for (int t = 1; t <= k + 1; ++t) {ans = min(ans, f[t][dst]);}return (ans == INF ? -1 : ans);}
};

基础知识补充:const和constexpr的区别

const:修饰的变量是"只读"属性

constexpr:修饰的变量是常量语义(常量或者常量表达式)

C++ 11标准中,为了解决 const 关键字的双重语义问题,保留了 const 表示“只读”的语义,而将“常量”的语义划分给了新添加的 constexpr 关键字。使用是建议将 const 和 constexpr 的功能区分开,即若表达“只读”语义的场景使用 const,表达“常量”语义的场景使用constexpr。
 

这篇关于K站中转站内最便宜的航班的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/235842

相关文章

最便宜的8口2.5G网管交换机! 水星SE109 Pro拆机测评

《最便宜的8口2.5G网管交换机!水星SE109Pro拆机测评》水星SE109Pro价格很便宜,水星SE109Pro,外观、接口,和SE109一样,区别Pro是网管型的,下面我们就来看看详细拆... 听说水星SE109 Pro开卖了,PDD卖 220元,于是买回来javascript拆机看看。推荐阅读:水

最近2个月捡漏买到很便宜但是很好用的几样物品

纯分享得瑟贴子哈哈 做为一个mou鱼和多多的重度用户,我日常生活的一个乐趣就是捡漏,日常说法也可以叫喜欢买便宜货,下面我列举一些最近2个月买到过的很值的东西: 电动摩托车380元,之前在多多买了一个类似的1500,但是由于商家给我发错了型号所以退了,然后后来机缘巧合,买到了这个,前主人买了一年了,骑的次数非常少,所以很新,轮胎胎毛都还在。 每日通勤成本一下子降低到了5毛钱,还不用忍受堵车

广州.Net培训价格最便宜的是那家?

广州.Net培训价格最便宜的是那家?   一直以来广州传智播客培训中心都以培养最优人才为己任,为企业提供最合适的人才,为社会培养栋梁,传智播客培养的软件开发人才受到社会及企业的广泛赞赏和认同,很多学员已成为众多国际国内知名IT企业的抢手人才或技术骨干。   广州.Net培训价格最便宜的是那家?当然首选广州传智播客培训中心拉,不着急,现在就告诉你是为什么选择广州传智播客培训中心吧?

hadoop入门--使用Apache Pig统计每个航班班次

案例基于hadoop 2.73,伪分布式集群 1,数据包导入hadoop集群hdfs的/user/root目录下 hdfs dfs -copyFromLocal 2008.csv /user/root 2,编写totalmiles.pig脚本 records = LOAD '2008.csv' USING PigStorage(',') AS(Year,Month,DayofMont

hadoop入门--使用MapReduce统计每个航班班次

案例基于hadoop 2.73,伪分布式集群 一,创建一个MapReduce应用 MapReduce应用结构如图: 1、引入maven依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="

助力618!你想便宜寄快递退换货吗?

家人们,姐妹们,马上就要到618了,每年一到这种重要的节日,我们都会买买买,但是我们有时候买了会发现这个商品不太满意,我们会选择退换货,或者给商家邮寄回去,但是这个运费可真的太贵了,我们也是很心疼呀,但是能有什么办法呢?我们只能硬着头皮去邮寄了,现在用咱们得闪侠惠递来寄快递,发物流,退换货,那就是最好不过了,用闪侠惠递寄快递,真的便宜又省钱呀,不仅我们不用去快递驿站拿过去了,还是快递员上门取件的。

航班进出港管理系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,航班信息管理,航飞降落请求管理,公告信息管理 前台账户功能包括:系统首页,个人中心,公告信息,航班信息 开发系统:Windows 架构模式:B/S JDK版本:Java JDK1.8 开发工具:IDEA(推荐) 数据库版本: mysql5.7 数据库可视化工具: navicat 服务器:SpringBoot自带 apache tom

力扣T1094拼车、T1109航班订购统计

当前进度: 10/150 题目来源:力扣1094题、力扣1109题 解题思路:B站讲解 这两个题目均为 查分数组问题,具体讲解,请看B站讲解 1094. 拼车 class Solution:def carPooling(self, trips: List[List[int]], capacity: int) -> bool:a = [0]* 1001flag = Truefor lis

百度:度度熊想去商场买一顶帽子,买第三便宜的帽子

度度熊想去商场买一顶帽子,商场里有N顶帽子,有些帽子的价格可能相同。度度熊想买一顶价格第三便宜的帽子,问第三便宜的帽子价格是多少? 输入描述: 首先输入一个正整数N(N <= 50),接下来输入N个数表示每顶帽子的价格(价格均是正整数,且小于等于1000) 输出描述: 如果存在第三便宜的帽子,请输出这个价格是多少,否则输出-1 输入例子1: 10 10 10 10 10 20 20

几百页资料要打印哪里打印便宜

在这个信息爆炸的时代,资料堆积如山成为了许多人的常态。无论是学生准备期末考试、论文,还是职场人士整理项目文档、合同,打印需求总是如影随形。面对厚厚的几百页资料,你可能会为去哪里打印既便宜又方便而犯愁。别急,琢贝云打印来帮你解决这个难题! 一、价格优势,让你省心 相信很多人都有过这样的经历:在实体打印店,动辄0.3-0.5元一张的价格让人望而却步。特别是当需要打印的资料页数较多时,费用更是一笔不