题目链接:
ACdream 1025
题意:
让你求从a转换到b的最少步数,a可以转化到a+x,x是a的因子。
题解:
dp题。
转换方程很容易推导出来啊。
设dp[i]表示转换到 i 时的最少步数。
那么,我们只需要考虑dp[i+j] 和 dp[i+ij]。其中,j 是 i
a 转到 b 总会转换得到,因为可以加一嘛。
a>b 时 ,直接输出−1就可以了。
代码:
#include <bits/stdc++.h>
using namespace std;
int dp[1234567];
int main()
{
int a,b;
cin>>a>>b;
if(a>b)return 0*puts("-1");
memset(dp,63,sizeof(dp));
dp[a] = 0;
for(int i=a;i<=b;i++)
{
for(int j=1;j*j<=i;j++)
{
if(i%j==0)
{
dp[i + j] = min (dp[i + j],dp[ i ] + 1);
dp[i + i/j] = min( dp[i + i/j] , dp[i] + 1);
}
}
}
cout<<dp[b]<<endl;
return 0;
}