题解:
一开始我这个代码想到的是使用递归来求解
int digui(int n){
int sum=0;
if(n==1)
sum=1;
if(n==2)
sum=2;
if(n==1||n==2)
return sum;
if(n>2){
return sum+=digui(n-1)+digui(n-2);
}
}
但是后面发现明显超时,我试图用记忆化搜索来抢救一下,所以就有了下面代码
int digui(int n){
if (memo[n] != -1) {
return memo[n];
}
if (n == 1) {
memo[n] = 1;
} else if (n == 2) {
memo[n] = 2;
} else {
memo[n] = digui(n-1) + digui(n-2);
}
return memo[n];
}
memset(memo, -1, sizeof(memo)); //main函数中使用这个进行了数组初始化
确实,使用记忆化搜索保存了之后确实节约了一些时间,因为保存了一些中间结果1,避免了重复计算中间值,但是依旧是超时,处理的n<100,然后就翻起了题解。
然后就发现了大家在