思路:
其实很道路很水,显然如果增大的话是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;
}