小 H 的魔法数字是 。给定 ,他希望用若干个 进行若干次加法、减法和整除运算得到 。但由于小 H 计算能力有限,计算过程中只能出现不超过 的正整数。求至少可能用到多少个 。
例如,当 时,有 ,用到了 个 ,是最优方案。
#include<iostream>#include<cstdlib>#include<climits>usingnamespace std;constint M =10000;bool Vis[M +1];int F[M +1];voidupdate(int&x,inty){if(y < x)
x = y;}intmain(){int n;
cin >> n;for(int i =0; i <= M; i++)
F[i]= INT_MAX;
①;int r =0;while(②){
r++;int x =0;for(int i =1; i <= M; i++)if(③)
x = i;
Vis[x]=1;for(int i =1; i <= M; i++)if(④){int t = F[i]+ F[x];if(i + x <= M)update(F[i + x], t);if(i != x)update(F[abs(i - x)], t);if(i % x ==0)update(F[i / x], t);if(x % i ==0)update(F[x / i], t);}}
cout << F[n]<< endl;return0;}