一、做题状况:
正在复习BFS和DFS。
二、思路分析:
自己想了方法,逐位计算,但是发现最后有的过程中会有多条路可选择,感觉回溯很麻烦,所以没有用回溯,导致有的输入数据直接进入死胡同,因为会遇到类似“死胡同”的地方。查了下网上他人的思路,觉得别人好聪明啊,利用DFS,最关键的是可以利用DFS暴力搜索一遍所有可能的结果,注意要利用unsigned long long类型,它可以计算到2.^64-1去,事实证明利用unsigned long long 结合DFS,可以过掉这道题。
三、题目类型:DFS四、进步这种题目要多接触才好,可以开阔眼界,拓展思维。以后没事,还要拿来练手。进步? it really broadens my horizons that it turn out to that it can be resolved by DFS.五、源代码#include<iostream> #include<cmath> using namespace std; int N; unsigned long long result=0; unsigned long long ull_max; void dfs(unsigned long long m) { if( result != 0 ) return; if( m>=N && m % N == 0 ) { result = m; } else { if( m*10 < ull_max ) dfs(m*10); if( m*10+1 < ull_max ) dfs(m*10+1); } } int main() { //freopen("d.txt","r",stdin); double d_ull_max = pow( (double) 2, (double) 64)-1; ull_max = d_ull_max; cin>>N; while( N != 0 ){ result = 0; dfs(1); cout<<result<<endl; cin>>N; } return 0; }