#include<bits/stdc++.h>
using namespace std;
#define MAX 0x3f3f3f3f//0x3f3f3f3f是1e9级别的数,用来表示无穷大,可以实现无穷大相加也为无穷大。还可以实现memset赋值
int gcd(int a,int b)
{
if(b==0)return a;
else return gcd(b,a%b);
}
int w[2300][2300];
int dist[3000];
int flag[3000];
int main()
{
memset(dist,MAX,sizeof(dist));
memset(flag,0,sizeof(flag));//常memset清0 ,它按字节操作
dist[1]=0;
for(int i=1;i<=2021;i++)
{
for(int j=1;j<=2021;j++)
{
if(i==j){w[i][j]=0;continue;}
if(abs(i-j)>21)w[i][j]=MAX;
else {
int item=gcd(max(i,j),i+j-max(i,j));
w[i][j]=i*j/item;
}
}
}
int s=1;
int u;
for(int i=2;i<=2021;i++)
{
int Min=MAX;
for(int j=1;j<=2021;j++)
{
if (dist[j]<Min&&!flag[j])
{
Min=dist[j];
u=j;
}
}
flag[u]=1;
for(int j=1;j<=2021;j++)
{
if(!flag[j])
{
if(dist[u]+w[u][j]<dist[j])
dist[j]=dist[u]+w[u][j];
}
}
}
cout<<"answer"<<dist[2021];
return 0;
}
2021LQB E
最新推荐文章于 2024-10-10 00:35:32 发布