记忆化搜索 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\n",maxi);

47     }

48     return 0;

49 }
View Code

 

你可能感兴趣的:(HDU)