FJNU.1189
Description
Recurrence relations are where a function is defined in terms of itself and maybe other functions as well. in this problem, we have two functions of interest:
F (N) = F (N - 1) + G (N - 1) ; F (1) = 1
G (N) = G (N - 1) + G (N - 3) ; G (1) = 1, G (2) = 0, G (3) = 1
For a given value of N, compute F (N).
Input
Each line of input will have exactly one integer, 57 > = N > 0.
Output
For each line of input, output F(N).
Sample Input
1
4
57
Sample Output
1
3
2035586497
My Program
#include<iostream>
using namespace std;
int main()
...{
long a[58]=...{0,1,2,2,3,5,7,10,15,22,32,47,69,101,148,217,318,466,683,1001,1467,2150,3151,4618,6768,9919,14537,21305,31224,45761,67066,98290,144051,211117,309407,453458,664575,973982,1427440,2092015,3065997,4493437,6585452,9651449,14144886,20730338,30381787,44526673,65257011,95638798,140165471,205422482,301061280,441226751,646649233,947710513,1388937264,2035586497};
int n;
while(cin>>n)
cout<<a[n]<<endl;
return 0;
}附带递归计算程序
#include<iostream>
using namespace std;
long G(int n)
...{
if(n==1)
return 1;
else
if(n==2)
return 0;
else
if(n==3)
return 1;
else
return G(n-1)+G(n-3);
}
long F(int n)
...{
if(n==1)
return 1;
else
return F(n-1)+G(n-1);
}
int main()
...{
long n;
int k;
while(cin>>k)
...{
n=F(k);
cout<<n<<endl;
}
return 0;
}YOYO's Note:
打表。
直接递归算肯定会TLE,反正它都给了0<N<=57,不打白不打……
打到50左右的时候每个都要等好久才出来……
幸好位数不是很多,直接long解决问题。
本文介绍了一种使用递归及动态规划方法解决特定数列计算问题的技术。通过两个函数F(N)与G(N)定义了数列,并提供两种实现方式:一种是通过递归计算,另一种则是预先计算并存储结果以提高效率。
994

被折叠的 条评论
为什么被折叠?



