20分的,求助求助。

P1255 数楼梯

456laji @ 2020-05-16 19:47:01

代码丑陋,见谅。

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
const int N=1e5+10;
ull num[N];

int solv(int w,int *a,int lena,int *b,int lenb,int k)
{

    if(w==k) 
    {
        for(int i=lenb;i>=0;i--)
            printf("%d",b[i]);
        return 0;
    }
    int lenc=0,up=0;
    int c[N]={0};
    while(lenc<=lena||lenc<=lenb)
    {
        c[lenc]=a[lenc]+b[lenc]+up;
        up=c[lenc]/10;
        c[lenc]%=10;
        lenc++;
    }
    c[lenc]=up;

    if(c[lenc]==0) lenc--;

    solv(w+1,b,lenb,c,lenc,k);
}

int main()
{
    int n;
    cin>>n;
    num[0]=0,num[1]=1,num[2]=2;
    if(n<=2)
        printf("%llu\n",num[n]);
    else if(n<100)
    {
        for(int i=3;i<=n;i++)
            num[i]=num[i-1]+num[i-2];
        printf("%llu\n",num[n]);
    }
    else {
        int a[N]={0},b[N]={0};
        a[0]=1,b[0]=2;
        solv(3,a,0,b,0,n);

    }
    return 0;
}

by 456laji @ 2020-05-16 20:48:34

@IamnotTXN 好奇,我去看看题解,是怎么写dp的


上一页 |