记忆化搜索 HDU1032

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 
 5 
 6 using namespace std;
 7 
 8 int arr[7000001];
 9 
10  int f(long long int i)
11 {
12     if(i<=7000000)
13     {
14         if(arr[i]!=0)
15             return arr[i];
16         if(i%2==0)
17             return arr[i]=f(i/2)+1;
18         else
19             return arr[i]=f(i*3+1)+1;
20     }
21     else
22     {
23         if(i%2==0)
24             return f(i/2)+1;
25         else
26             return f(i*3+1)+1;
27     }
28 }
29 
30 int main()
31 {
32     int m,n;
33     memset(arr,0,sizeof(arr));
34         arr[1]=1;
35     while(scanf("%d%d",&m,&n)!=EOF)
36     {
37         int maxi=0;
38          printf("%d %d ",m,n);
39         if(m>n)
40             swap(m,n);
41         for(int i=m;i<=n;i++)
42         {
43             if(f(i)>maxi)
44                 maxi=arr[i];
45         }
46         printf("%d
",maxi);
47     }
48     return 0;
49 }
View Code
原文地址:https://www.cnblogs.com/wsruning/p/4669602.html