0
点赞
收藏
分享

微信扫一扫

最短路(DP基础)

老牛走世界 2022-02-26 阅读 48
动态规划

 2020昆明站的C给我整傻了,回来写dp基础题找找自信,裂开~

Question:

分析:

首先,这道题是只能从编号小的点走到编号大的点,可以考虑dp

dp[i]表示从1走到 i 时花费最小的值,则对于整体的从1 到 j (j >= i)的最优策略是

Code: 

#include <bits/stdc++.h>
using namespace std;
int n,m;
int a[1010][1010];
int dp[1010];
int u, v, w;
int main(void)
{
	cin >>n >>m;
	memset(a,127,sizeof(a));
	
	for(int i = 1; i <= m; i++){
		cin >>u >>v >>w;
		a[u][v] = min(a[u][v], w);
	}
	memset(dp,127,sizeof(dp));
	dp[1] = 0;
	
	for(int i = 2; i <= n; i++){
		for(int j = 1; j < i; j++){
			//小于2^30就说明这个路径是存在的 
			if(dp[j] < (1<<30) && a[j][i] < (1<<30))
			dp[i] = min(dp[i], dp[j] + a[j][i]);
		}
	}
	cout <<dp[n];
	return 0;
}
举报

相关推荐

0 条评论