题目意思:n个城市,编号1到n,m条路,保证1到n是通的。路分为两种,一种是小路,每连续走S公路,将消耗S*S的疲劳值。另一种是大路,没连续走S公里,消耗S疲劳值。试问,最小疲劳值是多少?
错误思路:考试的时候,没有理解到连续这个词。如果连续走了两个小路,S1和S2,那么消耗疲劳值是(s1+s2)*(s1+s2),而不是s1*s1+s2*s2。如果是错误的想法,很容易想成最小生成树,结果我就错了。那么正常的想法是什么呢?DFS就行了。我们取的dp[1][goal]存1号节点到goal号节点的最小疲劳值,最后输出dp[1][n]。代码中有注释
#include<iostream>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<string.h>
using namespace std;
int flag[505][505],vis[505];
int wigh[5][505];
int dp[505][