(nice!!!)LeetCode 1928. 规定时间内到达终点的最小花费(动态规划dp)

题目:1928. 规定时间内到达终点的最小花费

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

思路:动态规划dp。时间复杂度0(10^6)

class Solution {

private:
    static constexpr int IN=INT_MAX/2;
public:
    
    int minCost(int maxTime, vector<vector<int>>& edges, vector<int>& passingFees) {
        int n=passingFees.size();
        //状态f[i][x]表示:在花费i时间的前提下,到达x城市的最小开销
        //先初始化为无穷大,表示非法状态
        vector<vector<int>> f(1+maxTime,vector<int>(n,IN));
        //初始化起点
        f[0][0]=passingFees[0];
        //第一层for循环进行时间枚举
        for(int i=1;i<=maxTime;i++){
        	//第二层for循环,遍历所有可能的边
            for(auto&g:edges){
                int x=g[0],y=g[1],cost=g[2];
                if(i<cost) continue;
                f[i][x]=min(f[i][x],f[i-cost][y]+passingFees[x]);
                f[i][y]=min(f[i][y],f[i-cost][x]+passingFees[y]);
            }
        }
        //最小开销
        int mn=IN;
        for(int i=1;i<=maxTime;i++){
            mn=min(mn,f[i][n-1]);
        }
        return mn==IN ? -1:mn;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值