NYOJ 252 01串

 这是俺的第一个dp,虽然只是简单的斐波那契………………

01串

时间限制:1000 ms  |  内存限制:65535 KB 
          描述

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
思路:简单的dp问题
状态方程 dp[i]=dp[i-1]+dp[i-2]
推导如下:
  长度为i的子串组成 =长度为i-1的末尾为0 的个数 *2+长度为i-1的末尾为1的个数*1
注:长度为i-1的末尾为0的个数=长度为i-2的个数
等量代换即得状态方程
View Code
 1 #include<iostream>
 2 using namespace std;
 3 int ans[50];
 4 int main()
 5 {
 6   int i=0,n,test;
 7   ans[2]=2,ans[3]=3;
 8   for(i=4;i<50;i++)
 9       ans[i]=ans[i-1]+ans[i-2];
10   cin>>test;
11   while(test--)
12   {
13       cin>>n;
14   cout<<ans[n+1]<<endl;
15   }
16 return 0;
17 }

 

posted on 2012-07-11 16:35  L_S_X  阅读(209)  评论(0)    收藏  举报

导航