PE14 (记忆化)

记得开long long

 1 #include<bits/stdc++.h>
 2 #define MAXN 1000000
 3 #define MAXR 50000000
 4 int vis[MAXR];
 5 using namespace std;
 6 int cal(long long n)
 7 {
 8     int ans=0;
 9     if(n<MAXR&&vis[n]) return vis[n];
10     if(n==1){
11         return 1;
12     }
13     if(n%2){
14         ans=1+cal(3*n+1);
15     }
16     else{
17         ans=1+cal(n/2);
18     }
19     if(n<MAXR)vis[n]=ans;
20     return ans;
21 }
22 int main()
23 {
24     int ans=0,maxn=0;
25     for(int i=2;i<=MAXN;i++){
26         int res=cal(i);
27         if(res>maxn){
28             ans=i;
29             maxn=res;
30         }
31     }
32     cout<<ans<<endl;
33     return 0;
34 }

 

posted @ 2018-05-30 17:35  ghblw  阅读(137)  评论(0)    收藏  举报