题目:
小明目前在做一份毕业旅行的规划。
打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次。
由于经费有限,希望能够通过合理的路线安排尽可能的省些路上的花销。
给定一组城市和每对城市之间的火车票的价钱,找到每个城市只访问一次并返回起点的最小车费花销。
输入格式
城市个数n。
城市间的车票价钱n行n列的矩阵 m[n][n]
输出格式
输出一个整数,表示最小车费花销。
数据范围
1<n≤201<n≤20,包括北京。
车票价格均不超过1000元。
解决思路:
dp状态 -- f( i , j )路线是i,现在在城市j的情况下,所花的钱最少的值。
i 是一个 1 ~ 2^20 之间的数,用二进制的形态记录已经走过的城市,1代表走过,0代表没走过。
计算公式为:f( i , j ) = f( i - (1 << j - 1) , k) + P( k , j ) ,
i - (1 << j - 1)表示到j之前的路径。
P( k , j )表示 k -> j 的花费。
枚举 (1 ~ 20)个 k (合法的)取最小值就是f( i , j )。
最后枚举 i = (1 << n) - 1,即所有城市均去过的情况下,当前所到城市j(1 ~ 20)回到出发城市 1 的最小值&#x