蒟蒻求助!为啥是40???

P1255 数楼梯

这有只蒟蒻呢_ @ 2021-02-19 10:18:31


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long a[10000]
long long f(int n)
{
    if(a[n]>0)return a[n];
    if(n==1)return 1;
    if(n==2)return 2;
    return a[n]=f(n-1)+f(n-2);
}
int main()
{
    long long n;
    cin>>n;
    cout<<f(n);
    return 0;
}

by _caiji_ @ 2021-02-19 10:19:18

高精度,请。


by ud2_ @ 2021-02-19 10:47:13

@这有只蒟蒻呢_ 你是怎么做到编译错误拿 40 分的(


by 这有只蒟蒻呢_ @ 2021-02-20 09:03:32

@caijianhong 我不会高精度, 我只会高精加


by 这有只蒟蒻呢_ @ 2021-02-20 10:03:43

我改了改程序,现在是50分了


by 这有只蒟蒻呢_ @ 2021-02-20 10:04:06


#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long a[10000];
long long f(int n)
{
    if(a[n]>0)return a[n];
    if(n==1)return 1;
    if(n==2)return 2;
    return a[n]=f(n-1)+f(n-2);
}
int main()
{
    long long n;
    cin>>n;
    cout<<f(n);
    return 0;
}

by Zhetengtiao @ 2021-02-21 09:36:22

unsigned long long也能得60分

况且这题得用高精,不然会炸掉


by LitApple02 @ 2021-02-22 21:37:54

你可以试试下载测试点2的数据就知道了,输入5000的时候结果有1045位(不信你数数),不用高精肯定炸。


by 奋斗吧!少女 @ 2021-02-23 10:30:25

用一下高精度

#include<bits/stdc++.h>
using namespace std;
int len=1,n,f[5010][5010];
void hp(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;
         f[k][i]=f[k][i]%10;
         if(f[k][len+1])len++;
    }

}
int main(){
    int i;
    scanf("%d",&n);
    f[1][1]=1;f[2][1]=2;    
    for(i=3;i<=n;i++)           
     hp(i);                         
    for(i=len;i>=1;i--)         
     printf("%d",f[n][i]);
    return 0;
}

by 这有只蒟蒻呢_ @ 2021-08-16 09:00:31

@Zhetengtiao 你好,tiaotiao!


|