###### 模板暴力解法,用时70s
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
#define int long long
#define endl '\n'
vector<vector<int>>graph;
const int inf = 1e18;
void creategraph(int n){
graph = vector<vector<int>>(n+1,vector<int>(n+1));
for(int i=1;i<n+1;i++){
for(int j=1;j<n+1;j++){
if(i==j){
graph[i][j] = 0;
}
else{
graph[i][j] = inf;
}
}
}
}
void addedge(int start,int end,int count){
graph[start][end] = min(graph[start][end],count);
graph[end][start] = min(graph[end][start],count);
}
int getmax(int a,int b){
while(b){
int temp = b;
b = a%b;
a = temp;
}
return a;
}
int getnum(int a,int b){
int num = abs(a-b);
if(num>21){
return inf;
}
return a/getmax(a,b)*b;
}
signed main(){
creategraph(2021);
for(int i=1;i<=2021;i++){
for(int j=i;j<=2021;j++){
int num = getnum(i,j);
// cout<<i<<" "<<j<<" ";
// cout<<num<<endl;
// Sleep(1000);
addedge(i,j,num);
}
}
for(int k=1;k<=2021;k++){
for(int i=1;i<=2021;i++){
for(int j=1;j<=2021;j++){
graph[i][j] = min(graph[i][j],graph[i][k]+graph[k][j]);
// cout<<graph[i][j]<<endl;
}
}
}
cout<<graph[1][2021];
return 0;
}
0 回复
0 转发
0 喜欢
0 阅读



