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 }
- 第一行有一个整数n(0<n<=100),表示有n组测试数据;

浙公网安备 33010602011771号