这道题目是一道典型的动规题目。首先动规方程比较容易写出来:ans(i,V)=min{ans(i,V),ans(k,V/{k})+road(i,k)},其中V是还没有抵达的城市的集合,road(i,k)记录的城市i到城市k的时间。
这道题目需要注意的是每一座城市可以跑无数次,这样我们在事先就必须要找出城市i到城市j的最短时间min_road(i,j),以及从i到j的路径,于是想到使用floyd算法。至于二维数组ans中V的实现可以通过二进制的方式实现记录。
#include<iostream>
using namespace std;
int city_num = 0;
int road[11][11] = { 0 };//记录从i到j的最短的路径
int path[11][11] = { 0 };