课后自主练习(递归)1063. 统计字符串个数 medium《编程思维与实践》个人学习笔记(review)

[EOJ] 实训题 P2846 统计字符串个数 简单DP [EOJ] 实训题 P3018 查找单词 先把题目地址贴出来:P2846 统计字符串个数 题干 在 0 和 1 组成的长度为 n (1⩽n⩽20) 的字符串中,输出不包含 “101”子串的字符串的个数。 输入格式 本题有多组测试数据。每组测试数据占一行,含一个正整数 n,表示字符串的长度。n = -1 表示输入结束。 输出格式 对每组测试数据,在一行中输出表示不包含 “101”子串的字符串的个数。... 阅读详情

题目

在 0 和 1 组成的长度为n (n<=20) 的字符串中,输出不包含 “101”子串的字符串的个数。

输入格式
本题有多组测试数据。每组测试数据占一行,含一个正整数 ,表示字符串的长度。n = -1 表示输入结束。

输出格式
对每组测试数据,在一行中输出表示不包含 “101”子串的字符串的个数。
在这里插入图片描述

思路①

①假定长 n-1且不含101的字符串 ⌂⌂ ⌂⌂⌂末尾加上0变成 ⌂⌂ ⌂⌂⌂0 显然也符合题目的条件,数量为f(n−1)f(n-1)f(n−1)
②长 n-1且不含101的字符串 ⌂⌂ ⌂⌂⌂末尾加上1变成 ⌂⌂ ⌂⌂⌂1 的时候,我们需要考虑⌂⌂ ⌂⌂⌂是⌂⌂ ⌂10的情况,这种情况下要剔除掉
末尾直接加1(不考虑末尾是10)的数量为
f(n−1)f(n-1)f(n−1)
③但是我们不能直接减去 ⌂⌂⌂10【即f(n-3)】的数量
这相当于你先找出来n-3长度的字符串再加上10的数量
但是你不能保证从 ⌂⌂⌂10 提取出的前n-3个字符串 ⌂⌂ ⌂ 不是 ⌂10 的形式(用用递归思想想)如果⌂⌂⌂的形式也是 ⌂10 的话,这就会导致⌂1010为末尾的数据并不会在f(n-1)中包含,导致错减

所以要分类讨论找出来⌂⌂⌂10的表达形式

④前n-1的字符串的末尾可以是以下形式
⌂⌂⌂⌂1 和 ⌂⌂⌂⌂0
前者加1是没有问题的,关键是⌂⌂⌂⌂0这个形式末尾+1是会导致不符合题目要求
⌂⌂⌂⌂0对应的数量就是
f(n−2)f(n-2)f(n−2)

⑤所以再对⌂⌂⌂⌂0字符串进行分类讨论
可以是
⌂⌂⌂10 和 ⌂⌂⌂00
后者加起来是符合要求的,但是前者不符合要求
前者⌂⌂⌂10的表达式应该是
⌂⌂⌂⌂0的数量-⌂⌂⌂00的数量,即
f(n−2)−f(n−3)f(n-2) - f(n-3)f(n−2)−f(n−3)

于是我们得到

f(n)=f(n−1)+{f(n−1)−[f(n−2)−f(n−3)]}f(n) = f(n-1) + \{f(n-1)-[f(n-2 )-f(n-3)]\}f(n)=f(n−1)+{f(n−1)−[f(n−2)−f(n−3)]}
在这里插入图片描述

代码

#include<iostream>
using namespace std;



int main()
{
    long long arr[21];
    arr[0] = 0;
    arr[1] = 2;
    arr[2] = 4;
    arr[3] = 7;
    for(int i = 4; i < 21; i++)
    {
        arr[i] = arr[i - 1] * 2 - arr[i - 2] + arr[i - 3];
    }
    
    int n;
    while((cin >> n)&& n != -1)
    {
        cout << arr[n]<<endl;
    }
    return 0;
}

思路②

①②步和思路1一样
但是我们把f(n-1)的满足题目要求的字符串分开储存
用f0[]储存末尾为0的数量
f1[]储存末尾为1的数量
于是我们轻易的得到了f0[]的递推关系
f0(n)=f0(n−1)+f1(n−1)f_0(n) = f_0(n-1)+f_1(n-1)f0​(n)=f0​(n−1)+f1​(n−1)
接下来考虑f1(n)的递推
⌂⌂⌂⌂⌂1要剔除掉⌂⌂⌂101这种情况
考虑到f1(n-2)的末尾一定是1
⌂⌂⌂1再续上01恰好就是⌂⌂⌂101的情况,对应的⌂⌂⌂1的数量即为f1(n-2)

f1(n)=f0(n)−f1(n−2)f_1(n) = f_0(n)-f_1(n-2)f1​(n)=f0​(n)−f1​(n−2)

代码

#include<iostream>
using namespace std;



int main()
{
    long long a[21];
    long long b[21];
    a[0] = 0;
    a[1] = 1;
    b[0] = 0;
    b[1] = 1;
    for(int i = 2; i < 21; i++)
    {
        a[i] = a[i - 1] + b[i - 1];
        b[i] = a[i] - b[i - 2];
    }
    
    int n;
    while((cin >> n)&& n != -1)
    {
        cout << a[n]+b[n]<<endl;
    }

    return 0;
}
问题 G(1203): 【基础算法】0/1字符串问题 问题 G(1203): 【基础算法】0/1字符串问题 时间限制: 5 Sec 内存限制: 64 MB 提交: 127 解决: 25 [提交][状态][我的提交] 题目描述输出仅由0和1组成的长度为N的字符串,并且其中不可含有三个连续的相同子串。例如,110101就不含有三个连续的相同子串。而111010就含有一组长度为1的连续相同子串:111输入第1行:字符串长度n(n≤40) 输出第 阅读详情

相关推荐

众灵科技24路舵机控制器二次开发实战(1)-STM32串口指令控制详解

本文详细介绍了如何通过STM32单片机对众灵科技24路舵机控制器进行二次开发,实现串口指令控制。文章从硬件连接、通信协议解析到STM32代码实战,手把手指导开发者打通控制链路,并重点讲解了如何调用预设动作组驱动六足机器人,为后续集成传感器、无线遥控等高级功能奠定基础。

weixin_29188997的博客 483

[dp]构串

用0和1构造一个长度为的数字串,要求串中不能出现 101 和 111,问能构造出多少个符合条件的串?比如,当时,可构出下列满足条件的串:000001010011100110。

m0_64542522的博客 837

ESP-IDF 利用ESP32构建智能音乐播放器(一)---------- 实现SD卡MP3文件的解码与播放

本文详细介绍了如何利用ESP32和ESP-IDF开发框架,从零开始构建一个智能音乐播放器。文章重点讲解了如何通过SD卡模块读取MP3文件,并集成Helix MP3解码库进行软件解码,最终通过I2S接口驱动音频模块实现播放。内容涵盖硬件连接、软件环境搭建、核心解码与输出逻辑,为嵌入式音频开发提供了完整的实战指南。

weixin_29163797的博客 234

NYOJ 01串

01串 时间限制:1000ms | 内存限制:65535KB 难度:2 描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。 注:01串的长度为2时,有3种:00,01,10。 输入第一行有一个整数n(0<n<=100),表示有n组测试数据;随后有n行,每行有一...

weixin_30470643的博客 447

从QEvent到系统响应:EC如何成为硬件事件的隐形信使

本文深入解析嵌入式控制器(EC)如何作为硬件事件的隐形信使,通过QEvent机制将按键、合盖等物理事件转换为SCI信号,并经由ACPI架构触发操作系统响应。EC与BIOS紧密协作,实现了从底层硬件到系统层面的高效事件传递,是嵌入式开发和系统优化的关键技术。

yellow的专栏 651

LSTM cell结构的理解和计算

LSTM是传统RNN网络的扩展,其核心结构是其cell单元,网上LSTM的相关资料繁多,质量参差不齐,下面主要结合LSTM神经网络的详细推导和 Christopher Olah的blog两篇文章中的内容进行说明。主要介绍网络如何计算,为何这么算先不展开:)。前者一副图加上29个公式,简洁明了;后者娓娓道来,适合初学者。首先是LSTM cell最常见的结构图: 这是变形的版本(找不到更清晰的版本了),

songhk0209的博客 2万+

算法:由0和1两种字符构成的达标字符串

字符串只由’0’和’1’两种字符构成, 当字符串长度为1时,所有可能的字符串为"0"、“1”; 当字符串长度为2时,所有可能的字符串为"00"、“01”、“10”、“11”; 当字符串长度为3时,所有可能的字符串为"000"、“001”、“010”、“011”、“100”、 “101”、“110”、“111” … 如果某一个字符串中,只要是出现’0’的位置,左边就靠着’1’,这样的字符串叫作达 标字符串。 给定一个正数N,返回所有长度为N的字符串中,达标字符串的数量。 比如,N=3,返回3,因为只有"101

OceanStar的博客 1541

三极管特性曲线看不懂?手把手教你用Multisim仿真分析放大电路频率响应

本文针对模拟电路初学者,详细讲解如何利用Multisim软件进行电路仿真,将抽象的三极管特性曲线与放大电路频率响应分析变得直观可视。通过手把手教学,指导读者从导入三极管SPICE模型、仿真输出特性曲线,到分析动态工作点,最终使用波特图仪深入分析频率响应并进行补偿设计,有效帮助理解电路原理并指导实践调试。

weixin_29230059的博客 122

【算法与数据结构】——矩阵快速幂

导引问题: 一个由0和1组成的字符串,任何字串都不能包含101和111,求满足要求的长度为L(1<=L<= 10810^8108)的字符串有多少个?结果对10810^8108求模。 递推公式:f(n)=f(n-1)+f(n-3)+f(n-4) n是字符串长度 字符串长度为1时,只有两个字符串且都满足要求:f(1)=2 字符串长度为2时,只有四个字符串且都满足要求:f(2)=4 字符串长度为3时,有8个字符串其中有两个不符合要求:f(3)=6 字符串长度大于三时,需要分类 结尾为0的字符串,前面

气派飞鹰的博客 469

【本地部署实战】LM Studio深度使用指南:从环境搭建到模型调优

LM Studio通过极简的操作流程和强大的生态兼容性,让本地部署大模型成为可能。随着M4芯片的发布和CUDA 12.0的优化,未来本地化AI开发将迎来新的爆发点。建议开发者关注官方Discord社区(https://discord.gg/lmstudio)获取最新模型支持信息。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 8750

ROS2入门到精通—— 1-1 Linux和ROS2基础

本文介绍了Linux的一般指令以及ROS2的常见理论和操作

BigDavid123的博客 3802

烽火通讯校招

笔试: 70(基础题)+算法题 算法第一题: 给出一个长度为n的仅由0和1构成的字符串s,你可以吧字符串中的一些1变成0,使得原串中不存在一个“101”的子串,子串的定义是原串中的一段连续的字符串,请问你最少改变多少个1 算法第二题 给定n个数,那么一共有2^n-1个非空子集,如果一个子集的数的和为K,那么我们就认为是满足条件的,那么需要计算多少个满足条件的非空子集。 假设有三个数分别为1,2,3,那么非空子集有{1},{2},{3},{1,2},{1,3},{2,3},{1,2,3} 算法第三题 有两个字

ITkobebryant的博客 3532

用 Custom Entity 打造 RAP Value Help:从能跑到好用的深度踩坑笔记

本文介绍了在RAP项目中实现Value Help(Fiori输入帮助)的完整流程。通过Custom Entity方式,开发者可以灵活构建不依赖数据库实体的值帮助功能,但需手动实现CDS原本提供的过滤、排序、分页等能力。文章以一个典型场景为例,详细说明了如何为Partner维护界面的City字段创建可搜索的值帮助,包括创建查询实现类、绑定CDS Custom Entity、服务发布等关键步骤,并特别指出了处理排序分页请求等常见问题。最后强调在ABAP Cloud环境下需要自行实现查询能力,而非依赖传统工具类。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 137

Eoj 2854 统计包含m个连续1子串的字符串的个数

统计特定字串模式的个数 Time Limit:1000MS Memory Limit:65536KB Total Submit:321 Accepted:173Description 在0和1组成的长度为n(1≤n≤31)的字符串中,统计包含m(1≤m≤n)个连续1子串的字符串的个数。Input 本题有多组测试数据。每组测试数据占一行,含n和m,表示字符串的长度和连续1的个数。n=-1和m=-1

fawks96的专栏 2265

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

01串 动态规划初级

描述 ACM的zyc在研究01串,他知道某一01串的长度,但他想知道不含有“11”子串的这种长度的01串共有多少个,他希望你能帮帮他。 注:01串的长度为2时,有3种:00,01,10。 输入第一行有一个整数n(0 随后有n行,每行有一个整数m(2 输出输出不含有“11”子串的这种长度的01串共有多少个,占一行。 样例输入 2 2 3 样例输出 3

lidafoye的博客 1017

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Electron+SerialPort串口开发:ABI兼容与打包交付避坑

在桌面端上位机开发中,Electron 与 SerialPort 的组合常被用于串口通信,但原生模块 ABI 兼容、IPC 架构、端口枚举与驱动权限、数据分帧等底层问题会直接影响交付稳定性。理解 Electron 运行时与 Node 原生模块的差异,掌握 electron-rebuild 重建、asarUnpack 解包、写队列与断线重连等工程手段,是让串口工具在开发机、测试机和用户机上一致运行的关键。面对扫码枪配置、单片机调试、PLC 参数读写等场景,一套从依赖选型到故障排查的通用链路能显著降低踩坑成本。

weixin_33853827的博客 417

非010串(矩阵快速幂+dp)

非010串 如果一个01字符串满足不存在010这样的子串,那么称它为非010串。 求长度为n的非010串的个数。(对1e9+7取模) Input 一个数n,表示长度。(n<1e15) Output 长度为n的非010串的个数。(对1e9+7取模) Sample Input 3 Sample Output 7 解释: 000 001 011 100 101 110 111 题意: 就是找长度为n的所有01序列中没有010这个子序列的个数 思路: 乍一看这个题直接没思路,这个题在现场真是推了一小时都没推出

weixin_51979465的博客 963

0 和 1 C语言

研究01串是一件很好玩的事情,现在有一个长度为n的01串,当一个连续的子串中0和1的个数相同,这个子串就是好的子串,现在请你写代码算出这个长度为n的01串中有多少个好的子串。

Naion的博客 3006

一个01字符串,求出现0、1出现次数相等的最长子串

一个01字符串,求出现0、1出现次数相等的最长子串 题目描述: 已知一个长度为N的字符串,只由0和1组成, 求一个最长的子串,要求该子串出0和1出现的次数相等。 要求算法时间复杂度尽可能的低。 比如: 1000010111000...

dili4575的博客 1465

【acm结论】有序排列0101交替排列

本题的例题来自UESTC的OJ1514,Little_Pro的driver朋友们和他的魔法。 题意概述: 第一行输入一个整数n(1~100000),第二行输入长度为n的,有且只有0和1组成字符串 现有两种操作: 操作a:交换相邻的两个数的值 操作b:更改某个位置的值 请问:最少需要多少次操作才可以使得该字符串以0和1交替出现的顺序出现。

m0_59206144的博客 754

不要11

题目描述 长度为n但是不含11的字符串(只含01构成)有多少?(允许有前导0) 输入 一个正整数长度n(1<=n<=1000) 输出 所有不含有11的字符串的总数由于数值很大,请输出对与1000000007取模的结果 样例输入 2 样例输出 3 #include<bits/stdc++.h> using namespace std; int main() { int n; cin >> n; long long dp[1001][2]; m

Codewarning 574

18 一个01字符串,求出现0、1出现次数相等的最长子串长度

一个01字符串,求出现0、1出现次数相等的最长子串长度 题目描述: 已知一个长度为N的字符串,只由0和1组成, 求一个最长的子串,要求该子串出0和1出现的次数相等。 要求算法时间复杂度尽可能的低。 比如: 10000010111000001,所求为8,加粗的部分有4个0、4个1 最简单的想法就是遍历所有的子串,之后判断该子串是否满足条件N^...

weixin_41563161的博客 3652

简单dp ---HDU3485 Count 101

题目大意:让求长度为n的0 和 1 构成的串中不包含101子串的个数有多少。 这个题当时想了好久,以为是一个规律题,一直在推规律,最后还是wa了,上网一看原来是dp问题, 不过确实递推式挺巧妙的。 递推式dp[i] = 2 * dp[i - 1] - dp[i - 2] + dp[i - 3]; 现在就来推一下这个式子,首先dp[i]就表示当长度为 i 的 的时候满足条件(就是串中...

dizhuo0219的博客 310

2846. 统计字符串个数

单点时限: 2.0 sec 内存限制: 256 MB 在 0 和 1 组成的长度为 n (1⩽n⩽20) 的字符串中,输出不包含 “101”子串的字符串的个数。 输入格式 本题有多组测试数据。每组测试数据占一行,含一个正整数 n,表示字符串的长度。n = -1 表示输入结束。 输出格式 对每组测试数据,在一行中输出表示不包含 “101”子串的字符串的个数。 样例 input 3 4 10 20 -...

Cuibaby的博客 892

课后自主练习(递归)1061. 统计特定字串模式的个数 medium《编程思维与实践》个人学习笔记

题目 在 0 和 1 组成的长度为n(1<=n<=31)的字符串中,统计包含m(1<=m<=n)个连续 1 子串的字符串的个数。 数据 1 1 2 1 3 1 4 3 10 3 10 5 20 10 20 15 31 20 31 1 -1 -1 思路 代码(递归) ll RE(int n, int m) { if(n < m) return 0; if(n == m) return 1; return 2 * RE(n - 1,m) + pow(2,

JamSlade的博客 576
上一篇: 课后自主练习(递归)1062. 达到回文数 naive《编程思维与实践》个人学习笔记
下一篇: 面向对象程序设计(基于C++)0301字符组合
JamSlade
博客等级 码龄6年 1万+粉丝 403原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值