UVA - 1374 - Power Calculus(迭代加深)

从小到大枚举可能的次数,然后迭代加深搜索验证

 

 

 1 #include<cstdio>  
 2 #include<cstring>  
 3 #include<cctype>  
 4 #include<cstdlib>  
 5 #include<cmath>  
 6 #include<iostream>  
 7 #include<sstream>  
 8 #include<iterator>  
 9 #include<algorithm>  
10 #include<string>  
11 #include<vector>  
12 #include<set>  
13 #include<map>  
14 #include<deque>  
15 #include<queue>  
16 #include<stack>  
17 #include<list>  
18 #include<ctime>  
19 #define all(x) x.begin(), x.end()  
20 typedef long long ll;  
21 typedef unsigned long long llu;  
22 const int MAXN = 1000 + 10;  
23 const int MAXT = 1000 + 10;  
24 const int INF = 0x7f7f7f7f;  
25 const double pi = acos(-1.0);  
26 const double EPS = 1e-6;  
27 using namespace std;  
28   
29 int a[MAXN], ans, n;  
30   
31 bool dfs(int lur){  
32     int pre = a[lur - 1];  
33     if(lur == ans){  
34         if(pre == n)  return true;  
35         return false;  
36     }  
37     if((pre << (ans - lur)) < n)  return false;  
38     for(int i = 0; i < lur; ++i){  
39         a[lur] = pre + a[i];  
40         if(a[lur] <= 1000 && dfs(lur + 1))  return true;  
41         a[lur] = pre - a[i];  
42         if(a[lur] > 0 && dfs(lur + 1))  return true;  
43     }  
44     return false;  
45 }  
46   
47 int main(){  
48     while(scanf("%d", &n) == 1 && n){  
49         a[0] = 1;  
50         for(ans = 1; !dfs(1); ++ans);  
51         printf("%d\n", ans - 1);  
52     }  
53     return 0;  
54 }  

 

posted @ 2016-10-25 10:35  TianTengtt  阅读(159)  评论(0)    收藏  举报