787. K 站中转内最便宜的航班(dp)

D A G DAG DAG图直接开二维数组 d p dp dp。

令 d p ( i , j ) dp(i,j) dp(i,j)到达 i i i经过 j j j站的最小费用。

然后直接转移就行了。

class Solution {private:static constexpr int INF = 10000 * 101 + 1;public: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);}
};

也可以直接上最短路跑 d p dp dp,这里的spfa不能标记,因为是二维的。

const int N=105,inf=0x3f3f3f3f;
#define mst(a,b) memset(a,b,sizeof a)
#define fi first
#define se second
class Solution {public:int h[N],cnt,vis[N];int d[N][N];struct edge{int to,nt,w;}e[N*N];void add(int u,int v,int w){e[++cnt]={v,h[u],w},h[u]=cnt;}void spfa(int st,int n,int k){queue< pair<int,int> >q;mst(vis,0);for(int i=0;i<=n;i++)for(int j=0;j<=k;j++) d[i][j]=inf;d[st][0]=0;q.push({st,0});while(!q.empty()){auto u=q.front();q.pop();// printf("(%d,%d)\n",u.fi,u.se);if(u.se>=k) continue;for(int i=h[u.fi];~i;i=e[i].nt){int v=e[i].to,w=e[i].w;if(d[v][u.se+1]>d[u.fi][u.se]+w){d[v][u.se+1]=d[u.fi][u.se]+w;q.push({v,u.se+1}),vis[v]=1;}}}}int findCheapestPrice(int n, vector<vector<int>>& ve, int st, int ed, int k) {mst(h,-1);for(auto v:ve){add(v[0],v[1],v[2]);}spfa(st,n,k+1);int ans=inf;for(int i=0;i<=k+1;i++) ans=min(ans,d[ed][i]);//    printf("%d %d %d %d\n",d[3][1],d[2][2],d[1][3],d[4][4]);return ans==inf?-1:ans;}
};

787. K 站中转内最便宜的航班(dp)相关推荐

  1. leetcode每日一题系列——787. K 站中转内最便宜的航班

    787. K 站中转内最便宜的航班 难度中等346收藏分享切换为英文接收动态反馈 有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi ...

  2. LeetCode 787. K 站中转内最便宜的航班(图/Bellman Ford算法)

    文章目录 贝尔曼-福特算法(Bellman-Ford) 简介 算法思想 算法执行过程 应用 题目描述 分析 代码 LeetCode 787. K 站中转内最便宜的航班 题目描述 Bellman For ...

  3. 787. K 站中转内最便宜的航班(加权有向图的最短路径)

    题目:787. K 站中转内最便宜的航班 两种方法: 方法一: 思路: 加权图的最短路径 1. 首先将航线转化为字典形式存储.(当前城市–下一城市–费用) 2. 建一个双向队列,元素为元组形式.(当前 ...

  4. 787. K 站中转内最便宜的航班(动态规划)

    package com.wsq.leetcode; /*** 787. K 站中转内最便宜的航班* @author wsq* @date 2020/10/21有 n 个城市通过 m 个航班连接.每个航 ...

  5. 【力扣】787. K 站中转内最便宜的航班加权——有向图最短路径

    前言 我感觉这题比较有代表性,所以记录一下,这题是加权有向图中求最短路径的问题. 题目 787. K 站中转内最便宜的航班 动态规划 假设有一条路径是[src, i, ..., j, dst],解法一 ...

  6. LeetCode——787. K 站中转内最便宜的航班(Cheapest Flights Within K Stops)[中等]——分析及代码(Java)

    LeetCode--787. K 站中转内最便宜的航班[Cheapest Flights Within K Stops][中等]--分析及代码[Java] 一.题目 二.分析及代码 1. 动态规划 ( ...

  7. 力扣787. K 站中转内最便宜的航班

    有 n 个城市通过一些航班连接.给你一个数组 flights ,其中 flights[i] = [fromi, toi, pricei] ,表示该航班都从城市 fromi 开始,以价格 pricei ...

  8. 最短路径-图-----练习力扣787. K 站中转内最便宜的航班

    首先还是搞定三种最短路径的算法. 参考:https://www.cnblogs.com/Halburt/p/10756572.html https://www.cnblogs.com/tahitian ...

  9. 【Bellman-Ford算法(求解最短路径约束问题)】787. K 站中转内最便宜的航班——算法分析

    [Bellman-Ford算法(求解最短路径约束问题)]787. K 站中转内最便宜的航班--算法分析 787. K 站中转内最便宜的航班 有 n 个城市通过一些航班连接.给你一个数组 flights ...

最新文章

  1. 【GoLang】GoLang GOPATH 工程管理 最佳实践
  2. The 15th UESTC Programming Contest Preliminary C - C0ins cdoj1554
  3. 机器学习知识点(四)最小二乘法Java实现
  4. 文件创建和删除命令:touch、rm
  5. maven自定义脚手架(快速生成项目)
  6. 【BERT】BERT的嵌入层是如何实现的?看完你就明白了
  7. Silverlight 2.0 RTW 正式版发布(附下载地址)
  8. pandas dataframe遍历_Pandas循环提速7万多倍!Python数据分析攻略!
  9. [Android Pro] RecyclerView实现瀑布流效果(二)
  10. 面试题之——多线程详解
  11. lisp如何将度分秒转换为弧度_3 角 度分秒与弧度互相转换
  12. android js 回调函数,Javascript回调函数传递给Android
  13. 好用的微信群管理软件
  14. hp 服务器可以安装win7系统安装,惠普HP预装Win10改Win7系统BIOS设置及安装教程
  15. 深度学习环境配置2——windows下的torch=1.2.0环境配置
  16. 小米6与xp系统不能连接服务器,小米6如何连接XP电脑
  17. JavaSE第二阶段之面向对象编程
  18. 大数据毕设选题 - 机器学习餐厅销量预测(大数据 python)
  19. 不同计算机的操作码完全相同,2012年计算机一级考试B试题及答案二
  20. 荣耀Magicbook14 BIOS更新无法开机

热门文章

  1. Python数据可视化_简单绘图_汇总(一)
  2. 【排障】使用DiskGenius修复0扇区损坏
  3. HTML 标签大全(包含语义与解释)
  4. 个性印章及公章的画法及实现
  5. 使用 data-* 属性来嵌入自定义数据:
  6. 基于java基于vue的百乐儿童玩具公司管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  7. 小学计算机课程开展报告,小学生信息技术课程学习动机的调查报告
  8. WPF-单选MenuItem
  9. Python机器学习——决策树
  10. 局域网下C++命令行聊天室简易版