城市个数n(1<n≤20,包括北京)
城市间的车票价钱 n行n列的矩阵 m[n][n]
最小车费花销 s
4 0 2 6 5 2 0 4 4 6 4 0 2 5 4 2 0
13
共 4 个城市,城市 1 和城市 1 的车费为0,城市 1 和城市 2 之间的车费为 2,城市 1 和城市 3 之间的车费为 6,城市 1 和城市 4 之间的车费为 5,依次类推。假设任意两个城市之间均有单程票可购买,且票价在1000元以内,无需考虑极端情况。
动态规划解决问题:
通过率50% ,其余超时
题目难点在于状态定义,关键点:题目理解。题目中要求回到北京,是一个定义状态麻烦的点。
状态定义: 代表由 i 城市出发,经过 nodes 里面所有节点,回到北京的最低费用。
状态转移方程:
,
边界方程: 当 ,花销直接可以定下来 ,
算法流程:
1. 根据输入构建花销矩阵,
2. 构建除北京外的节点列表
3. 返回 结果即可
n = int(input()) cost = [] for i in range(n): cost.append(list(map(int , input().split()))) def dp( i , nodes): if len(nodes)== 1: return cost[i][nodes[0]] + cost[nodes[0]][0] res = [float("inf") for _ in range(len(nodes))] for index ,node in enumerate(nodes): res[index] = cost[i][node] + dp(node , nodes[:index] + nodes[index+1:]) return min(res) nodes = [i for i in range(1,n)] print(dp(0, nodes))