蒟蒻求助!!!90分,第二个测试点MLE

P1255 数楼梯

lbc20070331 @ 2021-12-05 15:50:00

#include<bits/stdc++.h>
using namespace std;
#define getchar() (p1==p2 && (p2=(p1=buf)+fread(buf,1,1<<22,stdin),p1==p2)?EOF:*p1++)
char buf[(1<<22)],*p1=buf,*p2=buf;
long long f[5090][5090];
int len=1;
inline int read(){
    int x=0,f=1;
    char c;
    c=getchar();
    while(c<'0'||c>'9') {
        if(c=='-') f=-1;
        c=getchar();
    }
    while(c>='0'&& c<='9'){
        x=x*10+c-'0',c=getchar();
    }
    return x*f;
}
void print(int n){
    if(n<0) putchar('-'),n=-n;
    if(n>9) print(n/10);
    putchar('0'+ n%10);
}
void jf(int k){
    int i;
    for(i=1;i<=len;i++){
        f[k][i]=f[k-1][i]+f[k-2][i];
    }
    for(i=1;i<=len;i++){
        if(f[k][i]>=10){
            f[k][i+1]++;
            f[k][i]-=10;
            if(f[k][len+1]) len++;
        }
    }
}
int main()
{
    int n;
    n=read();
    f[0][1]=0;
    f[1][1]=1;
    f[2][1]=2;
    for(int i=3;i<=n;i++){
        jf(i);
    }
    for(int i=len;i>=1;i--){
        print(f[n][i]);
    }
    return 0;
}

by DaShaber @ 2021-12-05 15:58:27

@lbc20070331

long long f[5090][5090];

没必要开这么大

long long f[5090][1145];

都绰绰有余了


by lbc20070331 @ 2021-12-05 16:01:47

感谢感谢!!

已过


|