1. 程式人生 > >HDU 1715 大菲波數

HDU 1715 大菲波數

str size clu 數值 是個 ace 技術 out memset

大菲波數

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!

HDU 1715 大菲波數