20分蒟蒻在线求帮助!

P1255 数楼梯

xujialin268 @ 2021-08-24 11:26:42

#include<cstdio>
#include<iostream>
using namespace std;
int p[5005][5005],n;
bool t=false;
int main()
{
    cin>>n;
    if(n<3) cout<<n;
    for(int i=3;i<=n;i++)
    {
        for(int j=1;j<=5000;j++)
        p[i][j]=p[i-1][j]+p[i-2][j];
        for(int k=1;k<=5000;k++)
        while(p[i][k]>=10)
        {
            p[i][k+1]+=1;
            p[i][k]-=10;
        }
    }
    for(int i=5000;i>=1;i--)
    {
        if(t==false&&p[n][i]==0) continue;
        t=true;
        cout<<p[n][i];
    }
    return 0;
}//谢谢啦!!QWQ

by Yikara @ 2021-08-24 11:32:10

高精度


by 0x386 @ 2021-08-24 11:48:07

@xujialin268 把n=1和n=2先存到p数组里


by jltxsfl @ 2021-08-24 12:00:13

@xujialin268 把你的代码改成这样就可以过了,主要就是因为 第0阶 和 第1阶 没有初始化

#include<iostream>
using namespace std;
int p[5005][5005],n;
bool t=true;
int main()
{
    cin>>n;
    if(n==0){
        cout<<"0";
        return 0;
    }
    p[0][1]=1,p[1][1]=1;
    for(int i=2;i<=n;i++)
    {
        for(int j=1;j<=5000;j++)
        p[i][j]=p[i-1][j]+p[i-2][j];
        for(int k=1;k<=5000;k++)
        while(p[i][k]>=10)
        {
            p[i][k+1]+=1;
            p[i][k]-=10;
        }
    }
    for(int i=5000;i>=1;i--)
    {
        if(t&&p[n][i]==0) continue;
        t=false;
        cout<<p[n][i];
    }
    return 0;
}

|