描述如果一个二进制数包含连续的两个1,我们就称这个二进制数是非法的。小Hi想知道在所有 n 位二进制数(一共有2n个)中,非法二进制数有多少个。例如对于 n = 3,有 011, 110, 111 三个非法二进制数。由于结果可能很大,你只需要输出模109+7的余数。
输入一个整数 n (1 ≤ n ≤ 100)。
输出n 位非法二进制数的数目模10^9+7的余数。
样例输入3样例输出3

思路:

像这一类计数问题一定要记住不遗漏,不重复。这道题用动态规划计数,用d(i)表示i位非法二进制数的个数,i可以填0和1则分类,d0(i)表示以0结尾的非法数:.分类计数加法原理:d(i)=d0(i)+d1(1);1.  i填0的时候:d0(i)=d(i-1); //因为0不能为前面做出贡献,填0就等于d(i-1)2. i填1的时候,(1)从不遗漏角度:首先 d1(i)肯定包含了d(i-1),d(i-1)就是看有没有遗漏,比如一个i-1位的数不是非法数但第i位填1就让它变成了非法数,比如1001填1后变成10011,所以这就是d(i-1)遗漏的补分,所以d1(i)就包含了d(i-1)和{i-1位以1为结尾的所有二进制数}(2)从不重复角度:U1= d(i-1) 和U2={i-1位以1为结尾的所有二进制数}这两个集合 重复部分U1U2=d1(i-1),  综上i填1的时候,d1(i)= U1 + U2 - d1(i-1) = d0(i-1) + U2 = d0(i-1) + 2^(i-2);

递推式:

i>2时

d[0][i]=d[0][i-1]+d[1][i-1];

d[1][i]=d[0][i-1]+pow(2,i-2);

i=1时 d[0][1]=d[1][1]=0;

i=2时 d[0][2]=0;d[1][2]=1;

最终结果是 d[0][n]+d[1][n];

代码:

#include <vector>
#include <stack>
#include <string>
#include <cstring>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <queue>
#define _for(i,a,b) for(int i=a;i<b;i++)
#define _unfor(i,a,b) for(int i=a;i>=b;i--)
#define RI(a) scanf("%d",&a)
#define mset(a,val,n) for(int i=0;i<n;i++)a[i]=val;
#define mset2(a,val,n,m) for(int i=0;i<n;i++)for(int j=0;j<m;j++)a[i][j]=val;
#define FI freopen("in.txt","r",stdin)
#define FO freopen("out.txt","w",stdout)
using namespace std;
typedef long long LL;LL d[2][111],mod=1000000007,pow2[111];
int main() {int n;cin>>n;pow2[0]=d[1][2]=1;_for(i,1,n)pow2[i]=(pow2[i-1]*2)%mod;_for(i,3,n+1){d[0][i]=(d[0][i-1]+d[1][i-1])%mod;d[1][i]=(d[0][i-1]+pow2[i-2])%mod;}cout<<(d[0][n]+d[1][n])%mod<<endl;
}

蓝桥杯题目---非法二进制数相关推荐

  1. 蓝桥杯题目:九宫幻方(C++实现)(DFC)(打卡1)

    题目: 问题描述 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. 三阶 ...

  2. 蓝桥杯题目——带分数

    文章目录 前言 解题思路 全排列方法 递归实现 循环实现 组合数方法 循环实现 递归实现 浮点转整型思想 前言 本文介绍蓝桥杯题目--带分数,并且对其中包含的方法与思想进行总结,本文是上半部分. 参考 ...

  3. 蓝桥杯题目练习 提升篇 [蓝桥杯2019初赛]迷宫

    [蓝桥杯2019初赛]迷宫 题目描述 下图给出了一个迷宫的平面图,其中标记为1 的为障碍,标记为0 的为可 以通行的地方. 010000 000100 001001 110000 迷宫的入口为左上角, ...

  4. 蓝桥杯-题目:猜算式

    题目:猜算式 你一定还记得小学学习过的乘法计算过程,比如: 273 x 15 ------ 1365 273 ------ 4095 请你观察如下的乘法算式 *** x *** -------- ** ...

  5. 2013年蓝桥杯题目与解答

    1. 题目标题: 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天 ...

  6. 蓝桥杯题目练习(旅行家的预算)

    算法训练VIP 旅行家的预算 原题链接:旅行家的预算 题目描述 一个旅行家想驾驶汽车以最少的费用从一个城市 到另一个城市(假设出发时油箱是空的).给定两个城市之间的距离D1.汽车油箱的容量C(以升为单 ...

  7. 蓝桥杯题目练习(JAM计数法)

    算法训练VIP JAM计数法 题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的 ...

  8. 蓝桥杯题目 2682: 蓝桥杯2022年第十三届省赛真题-GCD

    题目描述 给定两个不同的正整数 a, b,求一个正整数 k 使得 gcd(a + k, b + k) 尽可能大,其中 gcd(a, b) 表示 a 和 b 的最大公约数,如果存在多个 k,请输出所有满 ...

  9. 蓝桥杯题目讲解(下)

    1.定义二维数组int a[5][6],则该二维数组可存储()个数组元素. A.20 B.25 C.30 D.16 这道题考察二维数组的知识,5 * 6 = 30,所以答案是C,(以前我有写过关于二维 ...

最新文章

  1. CVPR 2020夜间行人检测挑战赛两冠一亚:DeepBlueAI团队获胜方案解读
  2. 如何刪除GitHub中的repository
  3. 关于flink的日志文件设置
  4. VSFTP服务--Linux学习笔记
  5. 【CSS 】动画animation
  6. Leetcode--210.课程表Ⅱ
  7. 机器人测钢卷直径_酒钢碳钢冷轧钢卷自动焊接机器人上线
  8. 【SpringCloud】Spring Cloud bus
  9. 【luogu T34117 打油门】 题解
  10. WordPress后台定制-为WooCommerce产品增加自定义字段
  11. Python调用百度根据经纬度查询地址
  12. perfmon的使用及性能分析
  13. 【小米8手机的状况】
  14. 无线充电宝效果怎么样,无线充电实用性大吗
  15. 北京同创蓝天的全景航拍技术如何?应用在哪些方面呢?
  16. 远程连接Mysql报10038错误
  17. 由“c++链接错误:未定义的引用“引发的思考
  18. cad角度命令怎么输入_软件CAD | 修改工具栏(上)
  19. 批量修改linux服务器密码,Linux下批量修改服务器用户密码方法步骤
  20. 【ARM】led·fs2410流水灯

热门文章

  1. yocto平台初步提交uboot patch
  2. 常见网络安全事件研判方法及思路
  3. winxp远程桌面其他计算机,如何远程控制别人电脑?WinXP电脑怎样远程控制别人电脑?...
  4. c语言子函数返回字符串的正确方式
  5. 芯片验证学perl还是python_科学网—用python或perl语言简单验证RSA算法 - 康建的博文...
  6. 机器学习-白板推导-系列(九)笔记:概率图模型: 贝叶斯网络/马尔可夫随机场/推断/道德图/因子图
  7. 删 卡尔 波普尔_卡尔波普尔哲学语录28句,深度揭示生活中的错误
  8. IOS欢迎界面Launch Screen动态加载广告
  9. 抖音、今日头条、西瓜视频将打包上市
  10. 大数据时代如何保障数据安全