01串
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。
注:01串的长度为2时,有3种:00,01,10。
-
输入
-
第一行有一个整数n(0<n<=100),表示有n组测试数据;
随后有n行,每行有一个整数m(2<=m<=40),表示01串的长度;
输出
- 输出不含有“11”子串的这种长度的01串共有多少个,占一行。 样例输入
-
2 2 3
样例输出
-
3 5
/* NYoj 252 01串 简单的动态规划,也有点组合数的意思. 也是变形的斐波那契数列. 好题。 dp[n]=dp[n-1]+dp[n-2]; 该方程的意思是:长度为n的串不含‘11’串的由来. 要计算不含有“11”子串的n长度的01串共有多少个, n-1长度的01串有加0或者加1两种方式来成为n长度的01串, 1.加0肯定符合不含有“11”子串的要求。 2.加1的话只有在尾数为0的情况下才可以。 而n-1长度的01串尾数为0的情况不就是n-2长度的01串全部加0么! 好解释!!!! */ #include<cstdio> int main(){ int dp[45]; dp[1]=2; dp[2]=3; for(int i=3;i<44;i++) dp[i]=dp[i-1]+dp[i-2]; int n,m; scanf("%d",&n); while(n--){ scanf("%d",&m); printf("%d\n",dp[m]); } }
-
第一行有一个整数n(0<n<=100),表示有n组测试数据;