文章
34
粉丝
179
获赞
13
访问
199.0k
时间复杂度太大,不能AC的代码
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
const long long p=1e9+7;
long long a[1000005];
int main(){
int n;
while(cin>>n){
a[1]=1; //爬到1楼有一种方法
a[2]=2; //爬到2楼有两种方法
if(n==0) break;
for(int i=3;i<=n;i++){
a[i]=(a[i-1]+a[i-2])%p;
}
//a[n]=a[n]%p;
cout<<a[n]<<endl;
}
return 0;
}
改进后的代码:预处理思想
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
long long a[1000000];
const long long p=1e9+7;
int main(){
int n;
a[1]=1;
a[2]=2;
for(int i=3;i<=1000000;i++){ //这样做就是把所有可能要计算的值先计算出来,很多组数据时相比上面的时间复杂度会减少很多
a[i]=a[i-1]+a[i-2];
a[i]=a[i]%p;
}
while(cin>>n){
cout<<a[n]<<endl;
}
return 0;
}
先把可能的值计算出来,多组数据的时候可以减少复杂度而不会出现time out limit exceeded
还有一个要注意的地方就是一算出一个值就直接%,而不是等到最后,因为可能数据会超出范围
登录后发布评论
暂无评论,来抢沙发