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[i]和dp[i+n]的关系,然后就好解决了。

第一种方法:比较容易找规律就可以得到递推式

n==2的时候   00 01  10三种

n==3的时候   000  001  010  100  101  五种
n==4的时候   n==3的时候的情况末尾都加0 五种    +      n==2的时候情况末尾加0再加1  三种      =   八种
n==3的时候末尾不管是什么都可加0得到n==4的情况,而n==3的时候,末尾是0的还可以通过加1获得n==4的情况,而n==3时末尾是0的情况都是n==2的时候的所有情况通过末尾加0获得的,所以ans[i] = ans[i-1]+ans[i-2]

#include <cstdio>
#include <iostream>
using namespace std;int fun(int m)
{int ans[m+1];for(int i=2; i<=m; i++){if(i==2)ans[i]=3;else if(i==3)ans[i]=5;elseans[i]=ans[i-1]+ans[i-2];}return ans[m];}int main()
{int n;cin>>n;while(n--){int m;cin>>m;cout<<fun(m)<<endl;}return 0;
}
第二种方法其实更加通用:
用dp[i][2]来记录第i位上0,1数字的个数分别为多少。
我们可以很容易知道:
dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
dp[i][1] = dp[i - 1][0];
所以我们就可以通过这种方式推出dp[m][0]+dp[m][1]
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;int dp[41][2];int main(){int n;scanf("%d", &n);while(n--){int m;scanf("%d", &m);memset(dp, 0, sizeof(dp));dp[1][0] = 1;dp[1][1] = 1;for(int i=2; i<=m; i++){dp[i][0] = dp[i - 1][0] + dp[i - 1][1];dp[i][1] = dp[i - 1][0];}printf("%d\n", dp[m][0]+dp[m][1]);}return 0;
}

NYOJ题目252-01串(动态规划)相关推荐

  1. NYOJ 252 01串 dp

    01串 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有"11"子串的这种长度的0 ...

  2. NYOJ 252 01串

    01串 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有"11"子串的这种长 ...

  3. nyist 252 01串

    题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=252 思路:第一维表示长度,第二维表示目前最后一位是0还是1 AC代码: #include ...

  4. 【nyoj - 252】 01串(简单dp)

    题干: 01串 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 输入 第一行有一个整数n(0<n<=100),表示有n组测试数据; 随后有n行,每行有一个整数m(2 ...

  5. 01串(51Nod-1391)

    题目 给定一个01串S,求出它的一个尽可能长的子串S[i..j],满足存在一个位置i<=x <j, S[i..x]中0比1多,而S[x + 1..j]中1比0多.求满足条件的最长子串长度. ...

  6. 51nod-1391:01串

    1391 01串 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 给定一个01串S,求出它的一个尽可能长的子串S[i. ...

  7. 智乃的01串打乱(思维+暴力)

    题目连接 https://ac.nowcoder.com/acm/contest/23478/D 题面 思路 因为希望我们打乱后的01串和原串至少有一个位置不同,那么我们只需要随便找到一个值为1的位置 ...

  8. 01串状态压缩(位运算)

    题目描述: 农夫约翰对牛棚里昏暗的灯光感到不满,刚刚安装了一个新吊灯. 新吊灯由 N 个灯泡组成,这 N 个灯泡围成一圈,编号为 0∼N−1. 奶牛对这个新吊灯非常着迷,并且喜欢玩以下游戏: 对于第 ...

  9. 01背包问题 动态规划 java实现 简单通俗易懂

    ** 01背包问题 动态规划 ** 1.动态规划 什么是动态规划?动态规划就是将一个大问题不断向下拆分成小问题,直到拆分出的小问题可以求出其解,然后将小问题的解不断的向上合并,最终得到大问题的解决方案 ...

  10. 2272: 又是01串(http://acm.zzuli.edu.cn/problem.php?id=2272csrf=nr0h1HsiO5WDrN3Jk1j9aUmgYOdn7QAV)

    题目描述 给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s0..k−1中的0的个数与子串sk..n−1中1的个数相等. 注意: (1) 如果k = ...

最新文章

  1. 缓存和web缓存分别是什么?
  2. 【面试】Java基础中的那些事-One
  3. HTML5元素周期表
  4. DLL+ ActiveX控件+WEB页面调用例子
  5. Docker系列教程01-Centos7安装新版Docker教程(10步)
  6. [转]Eclipse插件开发之基础篇(2) 第一个Eclipse插件
  7. Objective-C 2.0 with Cocoa Foundation--- 6,NSObject的奥秘
  8. python怎么用pip下载_python怎么用pip安装包
  9. 这几个Python数据可视化探索实例,拿走不谢
  10. burp暴力破解 ——合天网安实验室学习笔记
  11. 2021ACA世界大赛中国赛区完美收官,创意设计收获百万级关注
  12. nginx 之安全配置
  13. Qt Creator下载安装以及Qt和Qt Creator的区别
  14. ajax提交验证非空,5.验证用户名是否已经被注册:AJAXC请求
  15. android手机邮件客户端,安卓手机邮件客户端ProfiMail Go
  16. Oracle Docker 镜像(制作)
  17. 论文投稿指南——中文核心期刊推荐(航空、航天)
  18. SRAM/SDRAM/DDR/Cache
  19. org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘emp
  20. YGG 与 Trial Xtreme 合作,快速进入极限赛车世界

热门文章

  1. tomcat启动脚本
  2. 《勒索软件经济分析》:“理想赎金”950英镑
  3. Monkey学习笔记三:Monkey脚本编写
  4. Ubuntu 14.04 配置iptables防火墙
  5. Here we offer the lowest price for SWG Gold
  6. Android中使用sax解析XML
  7. 网易云课堂Java模拟面试笔记(31-40)
  8. makefile中伪目标的理解
  9. 【社交分享SDK】ShareSDK for Android 2.5.9已经公布
  10. DDoSCoin:加密货币奖励用户参与 DDoS 攻击