很简单的地推公式问题,给一个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