- 问答
300分的TLE求救LQ1005
- 2024-2-1 18:46:49 @
这是代码
#include<bits/stdc++.h>
using namespace std;
int fib(int n){
if(n==1 || n==2){
return 1;
}else{
return fib(n-1)%10007+fib(n-2)%10007;
}
}
int main(){
int n;
cin>>n;
cout<<fib(n);
return 0;
}
4 条评论
-
corey0208 LV 8 @ 2024-4-13 10:55:43
leilaoshi把题解也删了吧
-
2024-3-2 14:52:51@
#include <iostream> #include <stdlib.h> #define M 10007 int main(int argc, char *argv[]) { long long a1,a2,n,fn,i; a1=a2=1; scanf("%lld",&n); if(n<=2) printf("%lld",a1); else { for(i=3;i<=n;i++) { fn=(a1+a2)%M; a1=a2; a2=fn; } printf("%lld",fn); } return 0; }
-
2024-2-5 8:53:30@
👍
-
2024-2-2 7:43:32@
这题你用递归铁超时,因为递归的时候会有一些部分重复算,比如你好不容易算出来,但是算时又得重算一遍,得用递推:
#include<bits/stdc++.h> using namespace std; int a[1000001]; int main(){ int n; cin>>n; a[1]=1; a[2]=1; for(int i=3;i<=n;i++){ a[i]=(a[i-1]+a[i-2])%10007; } cout<<a[n]; }
- 1