HDU 2047 阿牛的EOF牛肉串

HDU 2047 阿牛的EOF牛肉串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
void  chart ( long  long  ch[] )
{
      long  long   a = 3; //字母总数
      long  long   b = 2; //记住o外的其他字母 
      long  long   c = 1; //o的个数
      long  long   b1; //   记录上一次其他字母的个数
      ch[ 1 ] = a;
      for  ( int  i = 2; i < 45; ++i )
      {
          b1 = b;
          a = b * 3 + c * 2;
          b = b * 2 + c * 2;
          c = b1;
          ch[ i ] = a;
      }
  }
int  main ( )
{
     long  long  ch[45];
     int  n;
     chart ( ch );
     while  ( scanf ( "%d"  , &n ) == 1 )
           printf ( "%I64d\n"  , ch[n] );
     return  0;
}

 此题最重要的是要找规律,有两种方法来找出其规律,一种是唐聪的( 速度快)

  f ( n )  = [  f ( n - 1 ) + f ( n - 2 )];

  另一种是曹钦大侠的( 普遍性较强 )

  下面是曹钦大侠的思路解析:

      0        1      2      3      n

              E  ->  E  ->  E      ………………

                       ->  O

                       ->  F

                  ->   O  ->  E

                       ->  F

                 ->  F  ->  E

                       ->  O

                       ->  F

              O  ->   E  ->  E

                       ->  O

                       ->  F

                 ->  F  ->  E

                       ->  O

                       ->  F

              F  ->  E  ->  E

                       ->  O

                       ->  F

                 ->  O  ->  E

                       ->  F

                 ->  F  ->  E

                       ->  O

                       ->  F

    仔细观察上表可以看出随着n的增加O字母和非O字母有一定的关系;

    设有n节牛肉时总字母的可能种类为n,非o字母的可能总数为b,o的字母的可能种类为c,

    n = 1 时 , a1 = 3 ,  b1 = 2 ,  c1 = 1 ;

    n = 2 时,    a2 = b1 * 3 + c1 * 2 ,b2 = b1 * 3 - b1 + c1 * 2; c2 = b1;

    n = 3 时,  a3 = b2 * 3 + c2 *2 ,b3  = b2 * 3 - b2 + c2 * 2; c3 = b2;

    可以得到普遍规律  a( n ) = 3 * b ( n-1 ) + 2 *c ( n - 1 ), b( n ) = 2 * b( n - 1 ) + 2 * c ( n - 1 ), c ( n ) = c ( n - 1 );( 杭电2536 可用类似思路做 )

本人还是新手 ,转载请注明来自Lvsi‘s home
分类:  ACM(水题系列)

正着想比较复杂,倒着想感觉还可以;

思考最后一个字符只可能有三种情况:EFO

最后总的涂法为Fn;

当是E的时候倒数第二个字符可以随便涂,因而为此涂法数为:Fn-1;

当是F的时候倒数第二个字符也可以随便涂,因而为此涂法数也为:Fn-1;

当是O的时候

倒数第二个字符不能随便了,因为连续的2O是不符合要求的,因此O的时候又被分为二种情况为EF

在最后2个字符为EO的情况下,倒数第三个字符可以随便,因此此涂法为Fn-2;

在最后2个字符为FO的情况下,倒数第三个字符也可以随便,因此此涂法也为Fn-2;

此时已经讲所有的情况考虑完毕,Fn=2*F(n-1)+2*F(n-2);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值