leetcode:2478. 完美分割的方案数【预处理 + dp定义 + 前缀和优化】

news2024/10/7 1:21:10

目录

  • 题目截图
  • 题目分析
  • ac code
  • 总结

题目截图

在这里插入图片描述

题目分析

  • 开头必定是prime,结尾必定是not prime
  • k = 1特判
  • 找到所有可能的结尾点(最后一个不考虑)
  • 结尾点i必须满足s[i]->not prime, s[i + 1]->prime
  • 设结尾点集合为x
  • 0 <= x1 < x2 < … < xm <= n - 1 选k - 1个点
  • 不妨设为b1, b2, … b(k - 1), 满足
  • 1.b1 + 1 >= minLength
  • 2.bi - b(i - 1) >= minLength, i belongs to [1, k - 1]
  • 3.n - 1 - b(k - 1) >= minLength
  • 那么,这大概可以考虑dp
  • 变量有前i个结束点,第j个实际结束段,minLength为定值不考虑
  • 那么,dp[i][j]表示第i个结束点作为第j个结束段点的个数
  • 答案为所有满足i作为n - 1 - x[i] >= minLength,的dp[i][-1]之和
  • 转移方程:对于dp[i][j]而言,找到所有的i2使得x[i] - x[i2] >= minLength,那么dp[i][j] = sum(dp[i2][j - 1])
  • i2的找法显然是一个简单二分,那么sum(dp[i2][j])显然就是一个前缀和
  • 也就是说,在得到当前dp[i][j]的时候要维护一个第j列的前缀和,减少一层复杂度

ac code

提交的代码: 17 小时前
语言: python3

添加备注


class Solution:
    def beautifulPartitions(self, s: str, k: int, minLength: int) -> int:
        MOD = 10 ** 9 + 7
        n = len(s)
        primes = {'2', '3', '5', '7'}
        if s[0] not in primes or s[-1] in primes:
            return 0
        if k == 1:
            return int(s[0] in primes and s[-1] not in primes and len(s) >= minLength)
        # 可能的结束点j, 0 <= j < n - 1, j非质数 j + 1质数
        end_points = []
        for j, v in enumerate(s):
            if j < n - 1:
                if s[j] not in primes and s[j + 1] in primes:
                    end_points.append(j)
        #print(end_points)
        x = end_points
        m = len(end_points)
        if m < k - 1:
            return 0
        # 0 <= x1 < x2 < ... < xm <= n - 1 选k - 1个点
        # 不妨设为b1, b2, ... b(k - 1), 满足
        # 1.b1 + 1 >= minLength
        # 2.bi - b(i - 1) >= minLength, i belongs to [1, k - 1]
        # 3.n - 1 - b(k - 1) >= minLength
        # dp[i][j]表示第i个结束点作为第j个结束段点的个数
        # dp[i][k]求和,其中n - 1 - x[i] >= minLength
        dp = [[0] * (k - 1) for _ in range(m)]
        col_preSum = [[0] * (k - 1) for _ in range(m)] # 每列的前缀和优化
        for i in range(m): #init
            if x[i] + 1 >= minLength:
                #print(i, k, m)
                dp[i][0] = 1
            if i == 0:
                col_preSum[i][0] = dp[i][0]
            else:
                col_preSum[i][0] = col_preSum[i - 1][0] + dp[i][0]
         
        # 20221120我觉得大概能做出来把
        for i in range(m):
            for j in range(1, k - 1):
                # 本质上是一个j - 1列的前缀和
                # for i2 in range(i):
                #     if x[i] - x[i2] >= minLength:
                #         dp[i][j] += dp[i2][j - 1]
                #         dp[i][j] %= MOD
                check_point = x[i] - minLength
                i2 = bisect_right(x, check_point)
                if i2 == 0: # 找不到
                    dp[i][j] == 0
                else: # 找到
                    dp[i][j] += col_preSum[i2 - 1][j - 1]
                if i == 0:
                    col_preSum[i][j] = dp[i][j]
                else:
                    col_preSum[i][j] = col_preSum[i - 1][j] + dp[i][j]

        ans = 0
        for i in range(m):
            if n - 1 - x[i] >= minLength:
                ans += dp[i][-1]
                ans %= MOD
        return ans % MOD

总结

  • 预处理找分割点 + dp定义二维 + 前缀和优化
  • 从这道题我看到了自己的进步。。。

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

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

相关文章

Docker的容器管理

1、创建容器 容器创建&#xff1a;就是将镜像加载到容器的过程。 创建容器时如果没有指定容器名称&#xff0c;系统会自动创建一个名称。 新创建的容器默认处于停止状态&#xff0c;不运行任何程序&#xff0c;需要在其中发起一个进程来启动容器。 docker create创建的容器…

MCE | ROS 与疾病的关系

前段时间&#xff0c;一篇刊登在国际杂志 Cell Metabolism 上的研究报告表明&#xff0c;从表型正常的细胞转化为癌变细胞或许涉及抗氧化剂防御 (Antioxidant defense) 和核苷酸合成 (Nucleotide synthesis) 两个部分&#xff0c;而突破这些限制可能是致癌转化的关键。文中通过…

oracle常见报错问题处理

文章目录协议适配器错误怎么办&#xff1f;忘记密码了怎么办&#xff1f;报错:ora-01033oracle initialization or shutdown in progress&#xff1b;edit无法使用怎么办&#xff1f;报错:ORA-28547:connection to server failed,probable Oracle Net admin errorORA-12505:监听…

大一学生HTML期末作业_ 季奥林匹克运动会 8页 无js 带表单 带报告5200字

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 校园篮球网页设计 | 足球体育运动 | 体育游泳运动 | 兵乓球 | 网球 | 等网站的设计与制作HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&…

让你全方位了解Shell终端,轻松学习

关于shell终端&#xff0c;本文将在以下几个方面做以总结和说明&#xff0c;希望对大家有所帮助。 1.什么是shell Shell是用户和Linux操作系统之间的接口。Linux中有多重shell&#xff0c;其中缺省使用的是Bash。如果把Linux内核想象成一个球体的中心&#xff0c;shell就是围绕…

[go学习笔记.第十六章.TCP编程] 3.项目-海量用户即时通讯系统-redis介入,用户登录,注册

1.实现功能-完成用户登录 在redis手动添加测试用户,并画出示意图以及说明注意事项(后续通过程序注册用户) 如:输入用户名和密码,如果在redis中存在并正确,则登录,否则退出系统,并给出相应提示: 提示信息: 1.用户不存在或者密码错误 2.重新注册并登录 redis手动添加测试用户 ser…

GitLab的使用

目录 一、腾讯云 / 阿里云 购买服务器 二、服务器上安装GitLab-ce 三、使用git 1、首先把服务器上的代码克隆下来 2、将所有有改动的全部添加到要提交的本地库中 3、将修改提交到本地库 4、将本地库的commit推送到远程服务器 5、拉取服务器上最新资源&#xff1a; 6、…

智创未来 · 引领5G价值,广和通携5G AIoT创新应用亮相2022德国慕尼黑电子展

11月15-18日&#xff0c;两年一届的全球电子行业盛会——德国慕尼黑电子展&#xff08;Electronica 2022&#xff09;于慕尼黑展览中心顺利举行。作为全球领先的物联网无线通信解决方案和无线模组供应商&#xff0c;广和通精彩亮相B5馆139展台&#xff0c;向全球物联网企业分享…

机器学习分类模型评价指标之ROC 曲线、 ROC 的 AUC 、 ROI 和 KS

前文回顾&#xff1a; 机器学习模型评价指标之混淆矩阵机器学习模型评价指标之Accuracy、Precision、Recall、F-Score、P-R Curve、AUC、AP 和 mAP 1. 基本指标 1.1 True Positive Rate(TPR) TPRTPTPFNTPR \frac{TP}{TPFN}TPRTPFNTP​ 中文&#xff1a;真正率、灵敏度、召…

一天快速掌握Mybaits[一]

一、搭环境 Spring Initializr的搭建 创建完毕后的项目结构 此时application的后缀更名为yml&#xff0c;因为这样&#xff0c;看起来更简洁明了&#xff0c;而作用上&#xff0c;无差别 数据库环境的搭建 新建数据库 执行SQL语句 use mybatis-demo; CREATE TABLE user (id…

珠海航展有图扑 | 数字孪生方案助力智慧航天

2022 年 11 月 8 日~11 月 15 日&#xff0c;在第十四届中国国际航空航天博览会&#xff08;简称中国航展&#xff09;中&#xff0c;图扑先进的数字孪生解决方案&#xff0c;支撑合作伙伴实现人机交互场景。 图扑助力航展数字化 在本届国际航空航天博览会中&#xff0c;图扑…

Word控件Spire.Doc 【图像形状】教程(2) ;在 C#、VB.NET 中从 Word 中提取图像

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

代码演示GC回收

JVM配置 -XX:NewSize5m 初始新生代大小 -XX:MaxNewSize5m 最大新生代大小 -XX:InitialHeapSize10m 初始堆大小 等同于Xms -XX:MaxHeapSize10m 最大堆大小 等同于Xmx -XX:SurvivorRatio8 Eden区占80% -XX:PretenureSizeThreshold10m 大对象阈值 -XX:UseParNewGC 新生代使用ParN…

最新最全面的Spring详解(五)——事务管理

前言 本文为 【Spring】事务管理 相关知识&#xff0c;下边将对Spring框架事务支持模型的优点&#xff0c;Spring框架的事务抽象的理解&#xff08;包含TransactionManager、TransactionDefinition、TransactionStatus&#xff0c;编程式事务管理&#xff08;包含使用 Transact…

(七)笔记.net core学习之反射、加载dll、读取moudle、类、方法、特性

1.反射加载dll、读取moudle、类、方法、特性 &#xff08;1&#xff09;模块信息获取 &#xff08;2&#xff09;方法调用 2.反射创建对象、反射简单工厂配置文件&#xff08;破坏单例&#xff0c;创建泛型&#xff09; &#xff08;1&#xff09;程序的可配置可扩展&#xf…

【MEIF:ℓ1-ℓ0混合分解】

Multimodal Medical Image Fusion Using Hybrid Layer Decomposition With CNN-Based Feature Mapping and Structural Clustering &#xff08;基于CNN的特征映射和结构聚类的混合层分解的多模态医学图像融合&#xff09; 本文提出了一种特征级多模态医学图像融合&#xff0c…

springboot获取不到客户端ip问题排查

一、现象 springboot从2.0.2升级到 2.5.7后线上环境无法通过request.getHeader("x-forwarded-for")获取客户端ip地址&#xff0c;测试环境正常&#xff0c;开发环境也异常 二、结论 springboot 2.5.7版本中CloudPlatform多了Kubernetes platform的类型识别&#x…

SpringCloud整合Nacos最全教程(简介及安装部署整合)

目录 一、Nacos简介 Nacos与eureka的共同点 Nacos与Eureka的区别 二、Nacos安装配置 在windows中的安装教程 1.首先将windows安装版本的zip解压&#xff1a; 2.如果8848端口被占用&#xff0c;可以修改端口 3.进入到bin目录下&#xff0c;在cmd中运行以下命令启动 4.启…

Webpack 5 超详细解读(二)

11.importLoaders 属性 问题&#xff1a; test.css的内容如下&#xff1a; .title {transition: all .5s;user-select: none; }login.css的内容如下&#xff1a; /* 导入test.css */ import ./test.css; .title {color: #12345678; }再次npm run build发现运行之后的test.c…

外汇天眼:想通过外汇交易在几个月内成为亿万富翁吗?你必须知道的七大交易法则

WikiFX 策略 -这里有七个交易规则&#xff0c;将在不同程度上让您受益。 1.交易不是儿戏 这是一项业务&#xff0c;如果没有适当的计划、战略和有效的运营&#xff0c;就不可能取得长期的成功。 2.损失不可避免 由于市场始终存在风险&#xff0c;因此在您的交易中从多头转为…