787. K 站中转内最便宜的航班(dp)
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了787. K 站中转内最便宜的航班(dp)相关的知识,希望对你有一定的参考价值。
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)的主要内容,如果未能解决你的问题,请参考以下文章
[M最短路] lc787. K 站中转内最便宜的航班(Bellman-Ford算法模板+边数限制最短路+dp思想)
[M最短路] lc787. K 站中转内最便宜的航班(Bellman-Ford算法模板+边数限制最短路+dp思想)
LeetCode 787 K站中转内最便宜的航班[动态规划] HERODING的LeetCode之路
LeetCode 789. 逃脱阻碍者(贪心) / 1646. 获取生成数组中的最大值 / 787. K 站中转内最便宜的航班(有限制的最短路,重新审视迪杰斯特拉,动态规划)