杭电 2047 阿牛的EOF牛肉串

题目地址:

  http://acm.hdu.edu.cn/showproblem.php?pid=2047

  题目描述:

      有一个有字符E、O、F组成,长度为n的字符串,字符可重复,但是不能出现字符O与O相邻的情况,

      给定字符长度n,问符合要求的字符串总共有多少种?

  解题思路:

      设长度为n符合要求的字符串种数为f(n),这其中可分为两类:一类是以E或者F结尾的,另一类是以O结尾的。以E或者F结尾、长度为n、符合要求的字符串来源于以三种字符中的任何字符结尾长度为n-1符合要求的字符串后加一个字符E或者F,这样第一类的种数就是 f(n-1)*2;而以字符O结尾、长度为n、符合要求的字符串来源于以E或者F结尾、长度为n-1、符合要求的字符串后直接加一个字符O,而以E或者F结尾、长度为n-1、符合要求的字符串来源于以三种字符中的任何字符结尾、长度为n-2、符合要求的字符串后直接加一个字符E或者F,这一类的种数就是2*f(n-2),

      综上所述,f(n) = 2 * ( f(n-1) + f(n-2) );

      c语言代码如下:

      

#include <stdio.h>
#define MAXN 45
int main()
{
    int n, i;
    __int64 f[MAXN];
    f[1] = 3;
    f[2] = 8;
    for( i = 3; i < 40; i++ )
        f[i] = 2 * (f[i-1] + f[i-2]);
    /*for( i = 30; i < 40; i++ )
        printf( "%I64d\n", f[i] );*/
    
    while( scanf( "%d", &n ) != EOF )
    {
        printf( "%I64d\n",f[n] );
    }
    return 0;
}
View Code

 

posted @ 2013-08-03 08:01  翼展zjz  阅读(293)  评论(0编辑  收藏  举报