UVa 10450 - World Cup Noise

来源:互联网 发布:淘宝网生宣 编辑:程序博客网 时间:2024/06/06 09:19

题目:构造一个01串,使得其中的1不相邻,问长度为n的串有多少中。

分析:数学,递推数列。

            设长度为n的串有n个,则有递推关系:f(n)= f(n-1)+ f(n-2);

            长度为n的结束可能是0或者1:

            如果结束是0,则前面是0或者是1都可以所以是f(n-1);

            如果结束是1,则前面的必然是0,则更前面的随意,所以是f(n-2);

            这显然是Fib的递推公式,f(n)= Fib(n+1)。

说明:用long long防止溢出。

#include <iostream>#include <cstdlib>using namespace std;long long Fib[100];int main(){Fib[1] = Fib[0] = 1LL;for (int i = 2 ; i < 55 ; ++ i)Fib[i] = Fib[i-1]+Fib[i-2];int n,m;while (cin >> n) for (int i = 1 ; i <= n ; ++ i) {cin >> m;cout << "Scenario #" << i << ":\n" << Fib[m+1] << "\n\n";}return 0;}

0 0