Shirlies
宁静专注认真的程序媛~

看到《挑战编程》这本书,然后就试试做做上面的题目,之前已经在hdu上面过了这一题了,但是现在看到这一题,我是再想怎么可以运行更少的时间……

这里用了一个数组,记录已经计算出的值,结果时间缩短了10倍

但是我注释的地方不知道为什么会用问题,如果加上那一段就会RE~_~

代码如下:
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int vis[1000000+10];
 6 int get_value(int x)
 7 {
 8     if(vis[x] != 0) return vis[x];
 9 
10     int count = 1;
11     int tmp = x;
12     while(x > 1)
13     {
14         int temp = x;
15         if(x % 2 == 0)
16             x = x / 2;
17         else
18             x = 3 * x + 1;
19         /*if(vis[x] != 0 ) 
20         {
21             vis[temp] = vis[x] + 1;
22             count += vis[x];
23             vis[tmp] = count;
24             return count;
25         }*/
26         count ++;
27     }
28     vis[tmp] = count;
29     return count;
30 }
31 
32 int main()
33 {
34     memset(vis,0,sizeof(vis));
35     vis[1] = 1;
36 
37     int n,m;
38     while(cin >> n >> m)
39     {
40         int a = n ,b = m;
41         if(n > m)
42         {
43             a = m;
44             b = n;
45         }
46 
47         int maxvalue = 0;
48         for(int i = a;i <= b;i ++)
49         {
50             int num = get_value(i);
51             if(num > maxvalue)
52                 maxvalue = num;
53         }
54 
55         cout << n << " " << m << " " <<maxvalue << endl;
56     }
57 
58     return 0;
59 }
posted on 2012-08-08 16:56  Shirlies  阅读(271)  评论(0编辑  收藏  举报