DP入门50题(2)——NYoj252 01串
来源:互联网 发布:怎么订购淘宝视频服务 编辑:程序博客网 时间:2024/05/20 05:58
题意:
知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。
注:01串的长度为2时,有3种:00,01,10。
思路:
从长度为2开始考虑,有00,01,10三种;
长度为3,有000,001,010,101,100五种;
长度为4,有0000,0001,0010,1010,0101,1001,1000,0100八种
。。。。。。
找规律,dp[i][0]代表以0为结尾的01串
dp[i][1]代表以1为结尾的01串
则不难发现:
dp[2][0] = 2; dp[2][1]=1;
dp[3][0] = dp[2][0]+dp[2][1]=3; dp[3][1]=dp[2][0] = 2;
dp[4][0] = dp[3][0]+dp[3][1]=5; dp[4][1]=dp[3][0] = 3;
……
那每一种长度i的01串总和就是dp[i][0]+dp[i][1];
dp[i][0]=dp[i-1][0]+dp[i-1][1];
dp[i][1]=dp[i-1][0];
也就是dp公式了。
代码
#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>using namespace std;int main(int argc, char *argv[]){ cin.tie(false); ios::sync_with_stdio(false); long long n,a[200][2]; a[2][0] = 2; a[2][1] = 1; for(int i = 3 ; i < 41 ; i++) { a[i][0] = a[i-1][1]+a[i-1][0]; a[i][1] = a[i-1][0]; } #ifdef H_R freopen("in.txt","r",stdin); #endif // H_R while( cin >> n ) { int t; while(n--) { cin >> t; cout << a[t][0] + a[t][1] << endl; } } return 0;}
PS一句:其实找规律不难发现答案其实就是斐波那契数列。。。
- DP入门50题(2)——NYoj252 01串
- NYOJ252. 01串(经典DP)
- NYOJ252 01串
- NYOJ252---01串
- nyoj252 01串
- NYOJ252 01串
- nyoj252 01串(动态规划)
- NYOJ252
- DP入门50题(3)——poj2229 sumsets
- DP入门50题(4)——NYoj79 导弹拦截
- DP入门50题(7)——NYoj37 回文字符串
- NYOJ:01串 【DP入门】
- 概率DP —— 入门
- hdu3555 Bomb ——数位DP入门题
- DP入门50题(1) ——poj3176 数塔(详细、适合新手)
- DP入门50题(5)——NYoj 17 单调递增最长子序列
- DP入门50题(6)——poj1458 最长公共子序列
- POJ3624 01背包入门题[DP]
- Android多媒体系统的结构
- pat1061
- Remove Duplicates from Sorted Array
- C语言:常用算法
- BZOJ 3576 (HNOI 2014)江南乐 (博弈)
- DP入门50题(2)——NYoj252 01串
- 动态规划
- SpringMVC中的参数组装:HandlerMethodArgumentResolver
- leetcode maximum gap
- IOS开发学习中的基础知识究竟有多重要?
- C++多态技术
- 美语音标 [z]出现在字尾的变音
- emacs 24.4.1 org-mode 日程管理
- POJ 题目1062 昂贵的聘礼(最短路,枚举)