思路:
dfs或bfs,减枝即可。
#include<bits/stdc++.h>
using namespace std;
#pragma GCC optimize(3,"Ofast","inline")
int n;
unsigned long long x;
map<unsigned long long,int> mp;
long long bfs(){
queue<unsigned long long> qu,ji;
qu.push(x);
ji.push(0);
while(!qu.empty()){
vector<unsigned long long> ws;
unsigned long long sk=qu.front();
unsigned long long jis=ji.front();
qu.pop(),ji.pop();
unsigned long long jk=sk;
while(sk){
ws.push_back(sk%10);
sk=sk/10;
}
if(ws.size()==n){
return jis;
}
for(int i=0;i<ws.size();i++){
if(ws[i]>=2&&mp[jk*ws[i]]==0){
mp[jk*ws[i]]=1;
qu.push(jk*ws[i]);
ji.push(jis+1);
}
}
}
return -1;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin>>n>>x;
cout<<bfs()<<"\n";
return 0;
}