思路: 其实很道路很水,显然如果增大的话是3的指数增大,所以即使n=10000,但是其实回归到1的时间也只是log的时间而已。 所以可以直接暴力打表。 写递归只是练习一下记忆化搜索。 感觉DFS的基础真是不扎实。 菜啊。 最恶心的是给的数据范围有可能是坐边数字大于右边。因此wa了好多次。。 #include<iostream> #define max(a,b) (a>b?a:b) using namespace std; const int N=10005; int data[N]; void dfs(int i,int k,int s) { if(i<N&&data[i]) { data[s]=data[i]+k; return; } if(i&1) { dfs(i*3+1,k+1,s); } else { dfs(i/2,k+1,s); } } int main() { data[1]=1; for(int i=1;i<N;i++) dfs(i,0,i); int l,r; while(scanf("%d%d",&l,&r)!=EOF) { printf("%d %d ",l,r); if(l>r) { int tmp=l; l=r; r=tmp; } int ans=0; for(int i=l;i<=r;i++) ans=max(ans,data[i]); printf("%d\n",ans); } return 0; } 来源:https://www.cnblogs.com/bswgd/archive/2011/12/17/2300407.html 标签 dfs