文章

34

粉丝

179

获赞

13

访问

199.0k

头像
n诺-1685(爬楼梯游戏)
备考心情
发布于2022年2月27日 11:45
阅读数 6.6k

时间复杂度太大,不能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

还有一个要注意的地方就是一算出一个值就直接%,而不是等到最后,因为可能数据会超出范围

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发