hdu 2047 简单递推公式

很简单的地推公式问题,给一个n,在这n个位置上面放 'E' '0' 'F',这三个字符,问可以拼出多少不同的字符来,排除有‘0''O'相连的情况。

当n位取'O'的时候,那么n-1位就只能去'E''F'这两种可能,对于后面n-2之后的位置就没有任何的限定了。。。

所以情况是1*2*f[n-2];

当n位去'E''F'时,那么对于n-1位置没有任何的限定。。。

所以情况是2*f[n-1]

综上所述:

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

接下来不说了...果断水题..

View Code
 1  #include<iostream>
 2  #include<stdio.h>
 3  using namespace std;
 4  int main()
 5  {
 6     int n;
 7     __int64 dp[40];
 8     dp[1]=3,dp[2]=8;
 9     for(int i=3;i<=40;i++)dp[i]=2*(dp[i-1]+dp[i-2]);
10     while(scanf("%d",&n)!=EOF)
11     {                        
12        printf("%I64d\n",dp[n]);
13     }
14     return 0;
15  }
16  

 

posted @ 2012-09-01 21:36  诺小J  阅读(152)  评论(0编辑  收藏  举报