题解:
一开始我这个代码想到的是使用递归来求解
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,然后就翻起了题解。
然后就发现了大家在