切割01串问题(dp动态规划问题)

题目概述:

给定一个长度为 𝑛 的 01 串,定义如下操作为一次 “切割”:
将长度大于 1 的字符串分割为两个非空的连续字串,记分割出来的左侧字串 a 中 0 的出现次数为
C 0 C_0 C0,右侧字串 b 中 1 出现的次数为 C 1 C_1 C1​ ,需要满足 L ≤ L \leq L | C 0 − C 1 C_0 - C_1 C0C1| ≤ R \leq R R
你每次切割完,都会得到两个新 01 串,你可以继续选择这些已经被你切出来的 01 串做切割,只要满足切割条件。
jackle 想问你最多可以切割多少次?

输入描述:

第一行输入3个整数,n( 1 ≤ 1 \leq 1 n ≤ 500 \leq 500 500 L , R ( 0 ≤ L,R (0\leq L,R(0 L ≤ R L \leq R LR ≤ 500 ) \leq 500) 500),分别表示字符串长度,和题目中的两个参数。
第二行输入1个长度为n的01串。

输出描述:

输出最多能切割多少次

事例

输入

6 2 3
011011

输出

3

说明
其中一种切割次数最多的切法如下:
第一次切割可以切:0 ∣ 11011,然后选择 11011 这个串继续做切割。
第二次切割可以切:1 ∣ 1011,然后选择 1011 这个串继续做切割。
第三次切割可以切:1 ∣ 011。

分析题目: 看到题目中的最多,就应该想到需要用动态规划来解决(当时做的时候懵逼了,没有想出来)。题目就是让我们找有多少个字串满足切割条件,也就是求字串的数量只不过加上了一个限定条件,这样大概框架就有了。

DP
状态表示:dp[i][j],表示左端点为i,右端点为j的所有满足条件的字串的集合
状态计算:dp[i][j]=max(dp[i][j], dp[i][k] + dp[k][j] + 1) (k 为切割点)

代码表示:

#include <iostream>
#include <algorithm>
using namespace std;const int N = 505;
// 分别表示长度为N的字符串中0的数量和1的数量
int sum0[N], sum1[N], dp[N][N];
int n, l, r;
string s;
int main(){cin >> n >> l >> r;cin >> s;// 求前缀和// 这里因为我们的前缀和需要从1开始,但字符串是从0开始所以sum0 sum1是i+1才对for(int i = 0; i < s.length(); i ++){sum0[i + 1] = sum0[i] + (s[i]=='0');sum1[i + 1] = sum1[i] + (s[i]=='1');}// 求字串的模板// 字串长度不能取到n,否则就不是字串了for(int len = 1; len < n; len ++){// i为字串的起始位置for(int i = 1; i + len <= n; i ++){// 切割点的位置不能到字串长度的最后一位,否则右字串将是空串for(int j = i; j < i + len; j ++){int c0 = sum0[j] - sum0[i - 1];int c1 = sum1[i + len] - sum1[j];int sub = abs(c0 - c1);if(sub >= l && sub <= r){dp[i][i + len] = max(dp[i][i + len], dp[i][j] + dp[j + 1][i + len] + 1);}}}}cout << dp[1][n];return 0;
}

此题不算难题,但做的时候卡了挺久,就是因为没看出题的本质。
有不懂的地方可以评论区留言,欢迎点赞关注加收藏!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT:Java 的文档标准 OAS 是什么的缩写

ChatGPT&#xff1a;Java 的文档标准 OAS 是什么的缩写 OAS 是 “OpenAPI Specification” 的缩写。OpenAPI Specification 是一个用于描述和定义 RESTful APIs 的标准。最初由 Swagger 开发&#xff0c;现在由 OpenAPI Initiative 维护。OAS 使用一种标准的格式&#xff08;通…

【人工智能】穿越科技迷雾:解锁人工智能、机器学习与深度学习的奥秘之旅

文章目录 前言一、人工智能1. 人工智能概述a.人工智能、机器学习和深度学习b.人工智能发展必备三要素c.小案例 2.人工智能发展历程a.人工智能的起源b.发展历程 3.人工智能的主要分支 二、机器学习1.机器学习工作流程a.什么是机器学习b.机器学习工作流程c.特征工程 2.机器学习算…

基于GEC6818开发板+Linux+Qt设计的智能养老院出入管理系统

一、前言 1.1 项目介绍 【1】项目功能介绍 随着我国老龄化进程的加快,养老问题日益突出,如何有效保障老年人的生活质量与安全成为社会关注的重点。智能化、信息化技术的发展为解决这一问题提供了新的思路和手段。基于Linux系统的智能养老院出入管理系统应运而生,为了实现…

Thinkphp仿华为商城源码/红色风格电脑手机数码商城系统网站源码

Thinkphp仿华为商城&#xff0c;主要实现了商品首页展示、用户意见、商品分类列表、商品搜索、商品详细展示、购物车、订单生成、在线付款、以及个人中心完善个人资料、用户修改收货地址、余额查询、消费查询、订单管理、商品评价、热销商品和最近商品浏览&#xff1b; 后台是…

大模型的架构演进史——为什么Decoder-Only成为最终的胜利者

文章目录 大模型的架构encoder onlydecoder nolyencoder-decoder为什么现在decoder-only为主流 大模型的架构 encoder only 使用encoder-only的模型主要的思路是通过编码器&#xff0c;将大量文本、时序数据等资料进行编码、压缩&#xff0c;达到进一步抽象理解输入数据的能力…

WEB前端12-axios基础

Vue2-axios基础 1.axios基本概念 在现代的前端开发中&#xff0c;处理网络请求是至关重要的一部分。Axios 是一个流行的基于 Promise 的 HTTP 客户端&#xff0c;它可以在浏览器和 Node.js 环境中使用。它的设计简单易用&#xff0c;支持并行请求、拦截器、CSRF 防护等特性&a…

【JavaScript】函数的动态传参

Javacript&#xff08;简称“JS”&#xff09;是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名&#xff0c;但是它也被用到了很多非浏览器环境中&#xff0c;JavaScript基于原型编程、多范式的动态脚本语言&…

Linux 常用命令之文件处理

Linux 文件处理命令指南 文件查看命令 cat (Concatenate and display files) # 显示文件内容 cat file.txt# 显示多个文件的内容 cat file1.txt file2.txt# 将文件内容合并并输出到新文件 cat file1.txt file2.txt > combined.txt# 以行号显示文件内容 cat -n file.txtta…

写代码对人的影响

1 代码是需要跑起来的&#xff0c;不能你写了一段代码运行不了 2 代码过程中有大量的bug&#xff0c;经常异常报错&#xff0c;你需要花费时间去解决 对人的影响就是解决问题的态度得到强化&#xff0c;解决问题要比坚持正确困难&#xff0c;坚持正确只是需要自然而然的努力&…

淘宝NPM镜像地址已经改了,2022年以前发布的相关内容的博文已经没参考价值

http://npm.taobao.org和 http://registry.npm.taobao.org 已于2022.06.30正式下线和停止DNS解析 淘宝NPM镜像站的新域名为 http://npmmirror.com http://registry.npm.taobao.org > https://registry.npmmirror.com windows系统在命令行窗口下执行如下命令即可&#xff1a…

C++ primer plus 第16章string 类和标准模板库, 算法的通用特征

C primer plus 第16章string 类和标准模板库, 算法的通用特征 C primer plus 第16章string 类和标准模板库, 算法的通用特征 文章目录 C primer plus 第16章string 类和标准模板库, 算法的通用特征16.6.2 算法的通用特征 16.6.2 算法的通用特征 正如您多次看到的&#xff0c;…

掌握SQL Server的PowerShell魔法:自动化数据库管理的艺术

掌握SQL Server的PowerShell魔法&#xff1a;自动化数据库管理的艺术 SQL Server与PowerShell的结合为数据库管理员(DBA)提供了一种强大的自动化数据库管理工具。通过PowerShell&#xff0c;可以执行复杂的数据库任务&#xff0c;从简单的查询到复杂的数据迁移和备份策略的实现…

Python接口自动化测试框架(实战篇)-- 数据库操作MySQL

文章目录 一、前言二、数据库什么是数据验证为什么需要操作数据库做数据验证?现在回到怎样做数据验证的问题上来 三、[PyMSQL](https://pypi.org/project/pymssql/)pymysql如何操作数据库实际应用 四、总结 一、前言 说起数据库的操作&#xff0c;咱们应该保持一颗敬畏的心&a…

Ubuntu安装terminator教程

Terminator 是一个高级的终端仿真器,专为 Linux 和 Unix 系统设计。它的主要特点是提供了丰富的多窗口和多标签功能,使用户能够在一个窗口中管理多个终端会话。这对于系统管理员、开发人员以及需要同时运行多个命令行任务的用户来说,极为方便。 一、安装 1、更新包 sudo a…

【Python】计算游戏得分

一、题目 Kevin and Stuart want to play the The Minion Game. Game Rules Both players are given the san string S.Both players have to make substrings using the letters of the string S.Stuart has to make words starting with consonants.Kevin has to make wor…

Could not find a package configuration file provided by “catkin_simple“ 的参考解决方法

文章目录 写在前面一、问题描述二、解决方法参考链接 写在前面 自己的测试环境&#xff1a; Ubuntu20.04 ROS-Noetic 一、问题描述 CMake Error at /***/CMakeLists.txt:4 (find_package):By not providing "Findcatkin_simple.cmake" in CMAKE_MODULE_PATH thisp…

vue项目启动报错 vue与vue-template-compiler版本不一致

出现错误 Vue packages version mismatch: vue2.6.12 (/Users/work_ws/project/my/astar-education/astar-education-ui/node_modules/vue/dist/vue.runtime.common.js)vue-template-compiler2.6.13 (/Users/work_ws/project/my/astar-education/astar-education-ui/node_mod…

图中的最短环

2608. 图中的最短环 现有一个含 n 个顶点的 双向 图&#xff0c;每个顶点按从 0 到 n - 1 标记。图中的边由二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和 vi 之间存在一条边。每对顶点最多通过一条边连接&#xff0c;并且不存在与自身相连的顶…

Hive——UDF函数:高德地图API逆地理编码,实现离线解析经纬度转换省市区(离线地址库,非调用高德API)

文章目录 1. 需求背景数据现状业务需求面临技术问题寻求其他方案 2. 运行环境软件版本Maven依赖 3. 获取离线地址库4. Hive UDF函数实现5. 创建Hive UDF函数6. 参考 1. 需求背景 数据现状 目前业务系统某数据库表中记录了约3亿条用户行为数据&#xff0c;其中两列记录了用户触…