diff --git a/12lanqiao/test5-2.cpp b/12lanqiao/test5-2.cpp new file mode 100644 index 0000000..a6c63c3 --- /dev/null +++ b/12lanqiao/test5-2.cpp @@ -0,0 +1,35 @@ +// lanqiao 1460 路径(floyd) +#include +using namespace std; +const int N = 3e3 + 10, INF = INT_MAX; +bool vis[N]; // 标记数组 +int mindis[N][N]; // 最短路数组 +int s = 1, n = 2021; + +// floyd求多源最短路-时间复杂度-O(n^3) +void floyd(){ + // 枚举中转点 + for(int k = 1; k <= n; k++){ + // 枚举任意两点 + for(int i = 1; i <= n; i++){ + for(int j = 1; j <= n; j++){ + if(mindis[i][k] != INF && mindis[k][j] != INF){ + if(mindis[i][k] + mindis[k][j] < mindis[i][j]){ + mindis[i][j] = mindis[i][k] + mindis[k][j]; + } + } + } + } + } +} +int main(){ + fill(mindis[0], mindis[0] + N * N, INF); + for(int i = 1; i <= n; i++){ + for(int j = max(i-21, 1); j <= min(i+21, 2021); j++){ + if(i != j) mindis[i][j] = mindis[j][i] = lcm(i, j); + } + } + floyd(); + cout << mindis[1][n] << endl; + return 0; +} \ No newline at end of file