HDU 1715 大菲波数

本文介绍了使用两种不同方法计算斐波那契数列的问题。首先尝试了递归方法,但因整数溢出问题未能通过所有测试案例。随后,采用了一种基于数组的空间优化动态规划方法,成功解决了大数计算问题并显著提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大菲波数

Time Limit: 1000/1000 MS (Java/Others)    

Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20423    

Accepted Submission(s): 6891

Problem Description

Fibonacci数列,定义如下:
f(1)=f(2)=1
f(n)=f(n-1)+f(n-2) n>=3。
计算第n项Fibonacci数值。

 

Input

输入第一行为一个整数N,接下来N行为整数Pi(1<=Pi<=1000)。

 

Output

输出为N行,每行为对应的f(Pi)。

 

Sample Input

5 1 2 3 4 5

 

Simple Output

1 1 2 3 5

 题解:一开始,用的int还真是interesting!!!wa了wa了,emmmm数据少的时候可以用这个吧,

       给你们看一下我的错误的思路,受走楼梯那个动态规划想到的。emmmm也算是个模板。

没有AC的代码:

 

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int fib(int num)
{
     if(num==1||num==2)
         return 1;
     int a=1;
     int b=1;
     int temp=0;
     for(int i=3;i<=num;i++)
     {
         temp=a+b;
         a=b;
         b=temp;
     }
     return temp;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int pi;
        scanf("%d",&pi);
        printf("%d\n",fib(pi));
    }
    return 0;
}

 

后来,emmmm因为是大数,所以肯定要开个数组,emmmm还得节约时间,

不能输一个数就从头算一个数,二维数组吧,加内存,减时间。

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int fib[1003][1003];
int main()
{
    memset(fib,0,sizeof(fib));
    fib[1][1]=1;
    fib[2][1]=1;
    for(int i=3;i<=1000;i++)
    {
        for(int j=1;j<=1000;j++)//这里加法运算真是剪不断,理还乱,这里最重要了,错了就全完蛋。
        {
            fib[i][j+1]=(fib[i][j]+fib[i-1][j]+fib[i-2][j])/10;
            fib[i][j]=(fib[i][j]+fib[i-1][j]+fib[i-2][j])%10;
        }
    }
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int pi;
        scanf("%d",&pi);
        int node=0;
        int i=1000;
        while(!fib[pi][i])
        {
             node=i;
             i--;
        }
        for(int i=node-1;i>=1;i--)
            printf("%d",fib[pi][i]);
        printf("\n");
    }
    return 0;
}

今天也是元气满满的一天!good luck!

转载于:https://www.cnblogs.com/cattree/p/7498752.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值