2011.11.12 POJ1426 一道引我深思的问题

来源:互联网 发布:p2p网络控制软件 编辑:程序博客网 时间:2024/05/19 10:40
一、做题状况:
正在复习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;}