看到《挑战编程》这本书,然后就试试做做上面的题目,之前已经在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 }