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
本题之前使用递归,很明显会超时!动态规划想法:以DP[k]存储k长度时的组合种数∵第k 如果为0,则第k-1可能为1 or 0 所以将 直接将DP[k-1]加入dp[k];第k 如果为1,则k-1一定为0 则此时 DP[k-2]为此种情况的组合种数;∴DP[k] = DP[k-1]+DP[k-2];// // main.cpp // 01串 // // Created by JUNJIEGAO on 15/11/7. // Copyright © 2015年 JUNJIEGAO. All rights reserved. // #include <iostream> using namespace std; int ans[41]; void init () { ans[2] = 3; ans[3] = 5; for (int i=4;i<=40;i++) { ans[i] = ans[i-1]+ans[i-2]; } } int main(int argc, const char * argv[]) { init(); int n,len; cin>>n; while(n--) { cin>>len; cout<<ans[len]<<endl; } return 0; }
-
第一行有一个整数n(0<n<=100),表示有n组测试数据;