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
 2  #include
 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  

 

转载于:https://www.cnblogs.com/nuoyan2010/archive/2012/09/01/2667088.html

你可能感兴趣的:(hdu 2047 简单递推公式)