zoukankan      html  css  js  c++  java
  • 跳石板

    小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......
    这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。
    例如:
    N = 4,M = 24:
    4->6->8->12->18->24
    于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板

    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<sstream>
    #include<string>
    #include<limits.h>
    using namespace std;
    int minimumstep(int start,int end){
        vector<int>dp(end+1,INT_MAX);
        dp[start]=0;
    
        for(int i=start;i<end;i++){
            if(dp[i]==INT_MAX)
                continue;
                for(int j=2;(j*j)<=i;j++){
                    if(i%j == 0){
                        if(i+j <= end){
                            dp[i+j] = min(dp[i]+1,dp[i+j]);
                        }
                        if(i+(i/j) <= end){
                            dp[i+(i/j)] = min(dp[i]+1,dp[i+(i/j)]);
                        }
    
                    }
    
                }
        }
        if(dp[end]!=INT_MAX)
          return dp[end];
        return -1;
    }
    int main(){
        int start,end;
        while(cin>>start>>end){
           cout<<minimumstep(start,end); 
        }
    }
  • 相关阅读:
    HDU 5744
    HDU 5815
    POJ 1269
    HDU 5742
    HDU 4609
    fzu 1150 Farmer Bill's Problem
    fzu 1002 HangOver
    fzu 1001 Duplicate Pair
    fzu 1150 Farmer Bill's Problem
    fzu 1182 Argus 优先队列
  • 原文地址:https://www.cnblogs.com/qiuhaifeng/p/11533631.html
Copyright © 2011-2022 走看看