HDU 阿牛的EOF牛排(递推)

阿牛的EOF牛肉串

Time Limit: 1000ms   Memory limit: 32768K  有疑问?点这里^_^

题目描述

今年的ACM暑期集训队一共有18人,分为6支队伍。其中有一个叫做EOF的队伍,由04级的阿牛、XC以及05级的COY组成。在共同的集训生活中,大家建立了深厚的友谊,阿牛准备做点什么来纪念这段激情燃烧的岁月,想了一想,阿牛从家里拿来了一块上等的牛肉干,准备在上面刻下一个长度为n的只由"E" "O" "F"三种字符组成的字符串(可以只有其中一种或两种字符,但绝对不能有其他字符),阿牛同时禁止在串中出现O相邻的情况,他认为,"OO"看起来就像发怒的眼睛,效果不好。

你,NEW ACMer,EOF的崇拜者,能帮阿牛算一下一共有多少种满足要求的不同的字符串吗?

输入

输入数据包含多个测试实例,每个测试实例占一行,由一个整数n组成,(0< n< 40)。

输出

对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。

示例输入

1
2

示例输出

3

8

 

以前也有接触过递推的题,不过都没大注意过,今天做了一个发现一直一来对递推的理解竟然是完全错误的。。SAD (渣渣以为递推是这个样子的--f(n)=a*n  就是以为f(n)是关于n的一个具体函数,妈蛋数学学多了吧。。好吧 这次才发现原来递推是这样的 f(n)=a*f(n-1)+b*f(n-2)+......)

恩 以后多做递推的练习。。

说思路:题意很清楚,给定一个长度为n的字符串,用3种字符E O F 排列 OO不相邻 要求n等于一个具体数时排列数

              考虑第n个位置是O还是非O  如果是O 第n-1个位置上只能是E或F 而对n-2位置上没要求 推得 fn1=2*f(n-2);

                                                            如果不是O 则n-1位置上没要求 fn2=2*f(n-1)

                                                     所以总的情况 fn=fn1+fn2=2(f(n-1)+f(n-2))  当n=1时 fn=3; 由此递推

 

#include <stdio.h> 
#include <string.h>
#include <math.h>
int main()
{
 int n,i;
 double f[40]={3,8};
 for(i=2;i<40;i++)
  f[i]=2*(f[i-1]+f[i-2]);
 while(scanf("%d",&n)!=EOF)
 {
  printf("%.0lf\n",f[n-1]);
 }
 return 0;
}


 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值