牛客网 -- WY28 跳石板

牛客网 -- WY28 跳石板_第1张图片

题目链接: 跳石板_牛客题霸_牛客网 (nowcoder.com)

解题步骤:

牛客网 -- WY28 跳石板_第2张图片

参考代码:

void get_approximate(vector& v,int n)
{
    //求约数,从2到sqrt(n)即可,原因看图解
    //这里一定要等于sqrt(n),例如16,4也是约数
    for(int i=2;i<=sqrt(n);i++)
    {
        if(n%i==0)
        {
            v.push_back(i);
            //i是n的约数,那么n/i也是n的约数
            //但是如果i==n/i,即重复的就取一个就好
            //不等的时候两个都要取
            if(n/i!=i)
            {
                v.push_back(n/i);
            }
        }
    }
}

int main()
{
    int n=0;
    int m=0;
    cin>>n>>m;
    //多开一行,多开一列,并初始化为最大值
    vector dp(m+1,INT_MAX);
    //初始化dp[n]的值
    dp[n]=0;
    for(int i=n;i<=m;i++)
    {
        if(dp[i]==INT_MAX)//说明i位置不可到达,直接continue
        {
            continue;
        }
        vector approximate;
        //获取i的所有约数
        get_approximate(approximate,i);
        //填写dp表中所有dp[i+i的约数]的值
        for(int j=0;j

你学会了吗???

你可能感兴趣的:(牛客网试题,算法,数据结构,动态规划)