0
点赞
收藏
分享

微信扫一扫

ACdream 1025 Transform (dp)

weednoah 2022-08-11 阅读 34


题目链接:
​​​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;
}


举报

相关推荐

0 条评论