T2 AcWing 4868. 数字替换思路:DFS剪枝 搜索顺序优化 最优性优化 预测最优性优化 12345678910111213141516171819202122232425262728293031323334353637383940414243444546#include<iostream>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;LL num, n;int ans = 1000;void dfs(int u, LL num){ // 记录当前位数和记录出现的数字 int cnt = 0; int st[10] = {0}; for(LL i = num; i; i /= 10) { st[i % 10] = 1; cnt++; } // 最优性剪枝, 如果当前步数 + 剩余位数 大于最优解停止当前分支 if(u + n - cnt >= ans) return; // 终止条件 if(cnt == n) { ans = u; return; } // 搜索顺序优化, 优先从大到小遍历数字 for(int i = 9; i > 1; i--) if(st[i]) dfs(u + 1, num * i);}int main(){ cin >> n >> num; dfs(0,num); if(ans == 1000) ans = -1; cout << ans; return 0;} T3 AcWing 4869. 异或值思路Trie树