题目
分析:
动态规划问题,可以把到达各个点的情况用数组存起来,各个点的情况又要依赖之前的点,类似于前缀和那样,但每次遇到这个点需要更新为最优的情况。所有点都是最优后,选择最后一个点输出即可。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
if(b==0)return a;
return gcd(b,a%b);
}
int main()
{
int i,j,f[3000]={0};
for(i=1;i<=2020;i++)
for(j=i+1;j<=i+21;j++)
{
if(j>2021)break;
if(f[j]==0)f[j]=f[i]+i*j/gcd(i,j);
else
f[j]=min(f[j],f[i]+i*j/gcd(i,j));
}
cout<<f[2021];
}