蓝桥杯—路径(C语言)
题目描述
思路
1.思路借鉴:https://www.lanqiao.cn/questions/218103/
2. !!!最小公倍数=两数相乘/最大公约数
3. 动态规划,fi为从1到i(j)的最短路径,如果fi==0,表示还未到达过此点,到达后要先赋初值;如果不为0,则代表已经到达过此点,要取较小值
代码
#include
int f[2030];
int gxs(int x,int y){
int tem;
while(x>0){
tem=y%x;
y=x;
x=tem;
}
return y;
}
int main(){
int i,j;
for(i=1;i<=2021;i++){
for(j=i+1;j<=21+i;j++){
if(j>2021)break;
if(f[j]==0)f[j]=f[i]+j*i/gxs(i,j);//未到达过此点
else{
f[j]=f[j]>f[i]+j*i/gxs(i,j)?f[i]+i*j/gxs(i,j):f[j];选择较小的一个
}
}
}
printf("%d",f[2021]);
return 0;
}