Hat's Fibonacci
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4400 Accepted Submission(s): 1480
Problem Description
A Fibonacci sequence is calculated by adding the previous two members the sequence, with the first two members being both 1. F(1) = 1, F(2) = 1, F(3) = 1,F(4) = 1, F(n>4) = F(n - 1) + F(n-2) + F(n-3) + F(n-4) Your task is to take a number as input, and print that Fibonacci number.
Input
Each line will contain an integers. Process to end of file.
Output
For each case, output the result in a line.
先声明一个数组data,前四个数置1,后用大数加法实现4个数相加并打表,注意每位存放10000,一开始存放10,结果超内存
1 /* 2 练习简单DP是碰到的一道题,更像是大数相加 3 先声明一个数组data,前四个数置1,后用大数加法实现4个数相加并打表, 4 注意每位存放10000,一开始存放10,结果超内存 5 */ 6 #include7 #include 8 9 int data[7250][600];10 int p;11 int main()12 {13 memset(data,0,sizeof(data));14 data[1][0]=1;15 data[2][0]=1;16 data[3][0]=1;17 data[4][0]=1;18 p=1;//各数种最高位所在加119 for(int i=5;i<=7200;i++)//循环计算各数20 {21 for(int j=0;j<=p;j++)22 data[i][j]=data[i-1][j]+data[i-2][j]+data[i-3][j]+data[i-4][j];23 for(int j=0;j<=p;j++)24 {25 data[i][j+1]+=data[i][j]/10000;26 data[i][j]%=10000;27 }28 /*29 printf("\n%d \n",i);30 for(int j=p;j>=0;j--)31 printf("%d",data[i][j]);32 */33 if(data[i][p])34 p++;35 }36 37 int n;38 //printf("p=%d\n",p);//衡量2003位数需要的i值39 while(scanf("%d",&n)!=EOF)40 {41 42 int i;43 44 for(i=p;i>=0;i--)45 if(data[n][i]!=0)46 break;47 printf("%d",data[n][i--]);//第一位不需要前置048 for(;i>=0;i--)49 {50 printf("%04d",data[n][i]);//不足4位前置051 }52 53 printf("\n");54 }55 return 0;56 }