poj1953_斐波那契数列

题意:长度为n的01序列,没有相邻的两个1,这种序列有多少种。

分析:使用递推来解决,设长度为n的没有相邻1的01序列总数为f[n]。假设序列中最后一个元素为0,则前面n-1个元素只要本身满足没有相邻的两个1就可以,所以最后一个元素为0的情况有f[n-1]种;若最后一个元素为1,则倒数第二个元素必须为0,则前面n-2个元素只要本身满足没有相邻的两个1就可以,所以最后一个元素为1的情况有f[n-2]种。综合这两种情况,得到递推公式f[n]=f[n-1]+f[n-2],婓波拉契数列是一样的。

代码:

View Code
 1 #include <iostream>
 2 #include <stdio.h>
 3 using namespace std;
 4 //148K 0MS 
 5 const int maxnum=46;
 6 int f[maxnum];
 7 
 8 int main()
 9 {
10     int num,k,i;
11     f[0]=1;
12     f[1]=2;
13     for(i=2;i<maxnum;i++)
14         f[i]=f[i-1]+f[i-2];
15     scanf("%d",&num);
16     for(k=1;k<=num;k++)
17     {
18         scanf("%d",&i);
19         printf("Scenario #%d:\n",k);
20         printf("%d\n\n",f[i]);
21     }
22     return 0;
23 }

tjuoj 1726

转载于:https://www.cnblogs.com/pushing-my-way/archive/2012/08/26/2657607.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值