题目: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;
}
};