P7914 [CSP-S 2021] 括号序列 题解

2023-05-16

其实T2想清楚就不是很难,(虽然想清楚也不简单)

我这里分享一种很自然的想法,当然是区间dp啦

区间dp分6种状态

  1. ***的种类数,这种情况相当与题目中的 S S S,2到5中都一样

  2. (...)的种类数,这种情况表示有括号包裹的合法序列,2到5中都一样

  3. (...)***(...)***(...)***的种类数,表示以(...)开头,以***结尾的一长串,没有个数限制,比如(...)***也可以

  4. (...)***(...)***(...)的种类数,表示以(...)开头,以(...)结尾的一长串,没有个数限制,比如(...)也可以

  5. ***(...)***(...)***(...)的种类数,表示以***开头,以(...)结尾的一长串,没有个数限制,比如***(...)也可以

  6. ***(...)***(...)***的种类数,表示以***开头,以***结尾的一长串,没有个数限制,比如***也可以

转移很自然:

d p [ l ] [ r ] [ 0 ] = ( r − l + 1 ≤ k ) ∗ d p [ l ] [ r − 1 ] [ 0 ] ∗ ( s [ r ] = = ′ ∗ ′ ∣ ∣ s [ r ] = = ′ ? ′ ) dp[l][r][0]=(r-l+1\le k)*dp[l][r-1][0]*(s[r]=='*'||s[r]=='?') dp[l][r][0]=(rl+1k)dp[l][r1][0](s[r]==s[r]==?)

d p [ l ] [ r ] [ 1 ] = p i p e i ( l , r ) ∗ ( d p [ l + 1 ] [ r − 1 ] [ 2 ] + d p [ l + 1 ] [ r − 1 ] [ 3 ] + d p [ l + 1 ] [ r − 1 ] [ 4 ] ) dp[l][r][1]=pipei(l,r)*(dp[l+1][r-1][2]+dp[l+1][r-1][3]+dp[l+1][r-1][4]) dp[l][r][1]=pipei(l,r)(dp[l+1][r1][2]+dp[l+1][r1][3]+dp[l+1][r1][4])

其中 p i p e i ( l , r ) pipei(l,r) pipei(l,r)表示 s [ l ] s[l] s[l] s [ r ] s[r] s[r]可以匹配成括号

d p [ 2 ] [ l ] [ r ] = ∑ d p [ 3 ] [ l ] [ i ] ∗ d p [ 0 ] [ i + 1 ] [ r ] dp[2][l][r]=\sum dp[3][l][i]*dp[0][i+1][r] dp[2][l][r]=dp[3][l][i]dp[0][i+1][r]

d p [ 3 ] [ l ] [ r ] = ∑ ( d p [ 2 ] [ l ] [ i ] + d p [ 3 ] [ l ] [ i ] ) ∗ d p [ 1 ] [ i + 1 ] [ r ] dp[3][l][r]=\sum (dp[2][l][i]+dp[3][l][i])*dp[1][i+1][r] dp[3][l][r]=(dp[2][l][i]+dp[3][l][i])dp[1][i+1][r]

d p [ 4 ] [ l ] [ r ] = ∑ ( d p [ 5 ] [ l ] [ i ] + d p [ 4 ] [ l ] [ i ] ) ∗ d p [ 1 ] [ i + 1 ] [ r ] dp[4][l][r]=\sum (dp[5][l][i]+dp[4][l][i])*dp[1][i+1][r] dp[4][l][r]=(dp[5][l][i]+dp[4][l][i])dp[1][i+1][r]

d p [ 5 ] [ l ] [ r ] = ∑ d p [ 4 ] [ l ] [ i ] ∗ d p [ 0 ] [ i + 1 ] [ r ] dp[5][l][r]=\sum dp[4][l][i]*dp[0][i+1][r] dp[5][l][r]=dp[4][l][i]dp[0][i+1][r]

最后不要忘了把 d p [ l ] [ r ] [ 0 ] dp[l][r][0] dp[l][r][0]算到 d p [ l ] [ r ] [ 5 ] dp[l][r][5] dp[l][r][5]里,还有 d p [ l ] [ r ] [ 1 ] dp[l][r][1] dp[l][r][1]算到 d p [ l ] [ r ] [ 3 ] dp[l][r][3] dp[l][r][3]里,不知到为什么可以重新看一遍dp六种状态的定义

我的考场代码(不要学我#define int long long啊):

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=510,mod=1e9+7;
int n,k,dp[6][N][N];
char s[N];
bool pipei(int l,int r){
  return (s[l]=='('||s[l]=='?')&(s[r]==')'||s[r]=='?');
}
signed main(){
  freopen("bracket.in","r",stdin);
  freopen("bracket.out","w",stdout);
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin>>n>>k>>s+1;
  for(int i=1;i<=n;i++)dp[0][i][i-1]=1;
  for(int len=1;len<=n;len++){
    for(int l=1;l+len-1<=n;l++){
      int r=l+len-1;
      if(len<=k)dp[0][l][r]=dp[0][l][r-1]&&(s[r]=='*'||s[r]=='?');
      if(len>=2){
      dp[1][l][r]=pipei(l,r)*(dp[2][l+1][r-1]+dp[3][l+1][r-1]+dp[4][l+1][r-1]+dp[0][l+1][r-1])%mod;
        for(int i=l;i<r;i++){
          (dp[2][l][r]+=dp[3][l][i]*dp[0][i+1][r])%=mod;
          (dp[3][l][r]+=(dp[2][l][i]+dp[3][l][i])*dp[1][i+1][r])%=mod;
          (dp[4][l][r]+=(dp[5][l][i]+dp[4][l][i])*dp[1][i+1][r])%=mod;
          (dp[5][l][r]+=dp[4][l][i]*dp[0][i+1][r])%=mod;
        }
      }
      (dp[5][l][r]+=dp[0][l][r])%=mod;
      (dp[3][l][r]+=dp[1][l][r])%=mod;
    }
  }
  cout<<dp[3][1][n];
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

P7914 [CSP-S 2021] 括号序列 题解 的相关文章

  • 2021 => 手把手搭建dhcp服务(详细)

    架构解析 dhcp服务器配置 配置实验环境 关闭VMware的dhcp服务 给虚拟机添加网卡为VMnet1 安装与配置dhcp服务 给新添的网络配置IP 配置dhcp服务 在真实的主机系统上查看dhcp配置 为真实主机系统分配固定的IP 修
  • 2021-03-08

    解决大疆无人机电池电压不平衡出现电池错误提示无法起飞 一个简单的笨办法 xff0c 处理某块电芯偏低 xff0c 而另一块明显偏高 xff0c 经平衡和数据修正后 xff0c 在使用中反复 xff0c 说明各电芯之间容量发生物理不可逆的容量
  • 2021电赛F题数字识别和巡线部分

    文章之前12月发了一次 xff0c 但是我后来申请的免毕设后 xff0c 用到了一些文字 xff0c 所以删了这篇文章 xff0c 但是还是查重了 xff0c 于是我把一些程序讲解先删了 xff0c 等毕设结束后再编辑加上 这次电赛我没有准
  • 2021-03-15

    float型变量占用32bit xff0c 即4个byte的内存空间 我们先来看下浮点数二进制表达的三个组成部分 三个主要成分是 xff1a Sign xff08 1bit xff09 xff1a 表示浮点数是正数还是负数 0表示正数 xf
  • 2021-03-19

    输出 数字直角三角形 1 2 3 4 5 6 7 8 9 10 11 12 可根据需要增加行数 public class trangle 64 param args public static void main String args T
  • 【2021年8月】解决 rosdep update超时问题

    修改两个文件即可快速解决超时问题 1 修改 etc ros rosdep sources list d 20 default list 执行sudo gedit etc ros rosdep sources list d 20 defaul
  • 3D打印机硬件驱动-马林固件最新版本2.0.X中文注释(3)marlin 2.0.9.2 截至发稿时间2021年12月16日

    Marlin 3D Printer Firmware 头描述详见其他两个文件头描述 Copyright c 2020 MarlinFirmware https github com MarlinFirmware Marlin Based o
  • 2021-02-19

    This node presents a fast and precise method to estimate the planar motion of a lidar from consecutive range scans It is
  • 2021-06-18

    AttributeError module torch functional has no attribute relu AttributeError module torch functional has no attribute rel
  • Daily practice——2021/1/31

    1 函数若无返回值 则它一定无形参 请问这个说法是正确的吗 xff1f 答 xff1a 这个说法不正确 一个函数可以有参数 xff0c 没有返回值 xff1b 可以没有参数 xff0c 有返回值 xff1b 可以没参数 xff0c 没返回值
  • 2021-08-19-leetcode-00001

    二分查找 704 给定一个 n 个元素有序的 xff08 升序 xff09 整型数组 nums 和一个目标值 target xff0c 写一个函数搜索 nums 中的 target xff0c 如果目标值存在返回下标 xff0c 否则返回
  • VsCode+LaTexWorkshop外置PDF预览配置(2021.3.3)

    随着插件版本的升级有些配置命令发生了改变 xff0c 这里只是做个简单记录 xff0c 写的比较粗糙 后面有闲工夫再来做做美工 VsCode一侧配置 34 latex workshop view pdf viewer 34 34 exter
  • CSP-S 模拟测试57题解

    人生第一次A B层一块考rank2 xff0c 虽然说分差没几分 xff0c 但还是值得纪念 题解 xff1a T1 天空龙 xff1a 大神题 xff0c 因为我从不写快读也没有写考场注释的习惯 xff0c 所以不会做 xff0c 全hz
  • 2021-03-08

    今天在网上安装PR xff0c 网上下载的安装器把电脑默认装了一大堆垃圾工具 xff0c 依次删除后突然发现谷歌浏览器主页被篡改了 xff0c 随后用360等工具修复 xff0c 均提示无异常 通过浏览器设置和重置主页后仍然无效 xff0c
  • 2021-01-18

    求助 xff0c 关于Ubuntu20 04安装网络调试助手打不开的问题 我在虚拟机上安装了Ubuntu20 04并安装了网络调试助手 xff0c 但却打不开 xff0c 运用了sudo apt get libqtgui4 amd64也没用
  • 2021-10-07

    舵机PWM信号转继电器开关信号 本文由 麦粒电子 撰写 xff0c 并提供相应产品服务 叙述 航模玩家经常需要DIY改装 譬如飞行器做一个投弹的开关 xff0c 船用模型做一个投食机关 再或者弄一些彩灯控制 往往这些功能只需要有一个简单的开
  • 2021-01-11

    C 43 43 指针随便笔记 sizeof 先说一个没有成员函数和参数的类 xff0c 占用一个字节 类中的成员函数 xff0c 作为外部指针时 xff0c 需要记得delete xff0c 否则会内存泄漏 指针的sizeof是指针本身的数
  • CSP认证历年真题题解 (Python)

    文章目录 此篇文章是小菜本菜使用Python做CCF CSP的一些记录 希望能够以此帮助到正在为题目苦苦思考 但还没有找到解决思路的朋友们 诚然 这里的代码还有很多值得改进之处 希望各位码友不吝赐教 目前已完成历年的第一题 第二题 第三题正
  • CCF/CSP 201409-3 字符串匹配(满分题解Java版)

    此题虽然放在了第三题 但是如果对Java的API了解的比较好的同学 解这道题一点都不难 比前几题都要简单一些 题目描述 官方题目地址 读题请点击 Java满分题解 import java util Scanner next 与 nextLi
  • CSP 202212-1 现值计算

    答题 主要就是 include

随机推荐

  • ubuntu与win10共享LE蓝牙鼠标

    类似的教程网上有很多 xff0c 大部分是找到蓝牙设备目录下info文件中的 linkKey 中的key值复制到win10下注册表中 xff0c 但是对于蓝牙5 0或LE设备来说 xff0c 是没有linKey的 xff0c 这里我也参考了
  • FileZilla搭建FTP服务器图解教程,并允许外网访问NAT内网

    FTP是用来在两台计算机之间传输文件 xff0c 是Internet中应用非常广泛的服务之一 FTP服务是网络中经常采用的资源共享方式之一 FTP协议有PORT和PASV两种工作模式 xff0c 即主动模式和被动模式 今天我分享一个最近我自
  • 十进制转换八进制(C语言基础)

    题目描述编程 xff0c 输入一个 xff11 xff10 进制正整数 xff0c 然后输出它所对应的八进制数 输入无输出无样例输入10样例输出12 include lt stdio h gt int main int num m 61 0
  • 【Godot】对 Godot 节点设计的思考

    对 Godot 中节点设计的思考 单个节点的功能设计的想法 xff0c 体会 Godot 的设计思想 低耦合 设计单个节点可复用的节点时 xff0c 调用方法尽量只对当前节点可获取到的变量或方法进行使用 xff0c 比如我写一个可以控制 K
  • 【Godot】行为树(一)了解与设计行为树代码

    行为树介绍 行为树是个节点树 xff0c 父节点通过不断遍历子节点 xff0c 根据不同类型的节点执行不同的分支 最终调用叶节点执行功能 行为树也不难理解 xff0c 他就像代码逻辑一样 xff0c 只是用节点的方式展现出来 xff0c 而
  • 【Godot 4.0】一个简单的匿名方法的使用lambda

    Godot 4 0 beta3 Godot 4 0 中添加了 lambda 表达式 xff0c 匿名方法等很多方便的特性 xff0c 这里我写个用于扫描目录下所有文件的功能 可以看到代码非常简洁 span class token keywo
  • aur报错(错误:一个或多个文件没有通过有效性检查)

    当我们从aur里安装软件时 xff0c 有时会出现这种报错 xff08 如安装deepin wine wechat xff09 61 61 gt 错误 xff1a 一个或多个文件没有通过有效性检查 xff01 Error downloadi
  • Java使用不同方式获取两个集合List的交集、补集、并集(相加)、差集(相减)

    1 明确概念 首先知道几个单词的意思 xff1a 并集 61 union 交集 61 intersection 补集 61 complement 析取 61 disjunction 减去 61 subtract 1 1 并集 对于两个给定集
  • 【VTK】VTK框选表面拾取三角面片——通过观察者命令模式

    VTK框选拾取三角面片 最近需要实现拾取三角面片的交互功能 xff0c 看了官方示例和网友分享 xff0c 都是使用vtkInteractorStyleRubberBandPick搭配vtkAreaPicker 但是具体实现方法都是选择继承
  • 【VTK】VTK框选表面拾取面片——仅选中前表面

    VTK框选表面拾取面片 仅选中前表面 接上一篇 VTK框选表面拾取三角面片 通过观察者命令模式 上一篇最后遗留一个问题 xff0c 框选表面后 xff0c 会把模型背面的面片也一起选中 所以这篇内容是解决该问题的 效果预览 功能说明 通过鼠
  • GoDB开发踩坑记

    前言 前几天因为leancloud网速太慢所以自己写了一个go语言数据库 xff0c 想部署到我的树莓派上 正文 我在写的时候发现了一些神奇的操作 golang 把js变量的表达方式字符串转换成go变量 可以先把它嵌入到一个json字符串中
  • 通过Java反射获得对象里面的所有字段名以及字段对应的值

    首先我们有一个对象类 span class token keyword package span com span class token punctuation span xuzihui span class token punctuat
  • GoDB开发踩坑记(代码实现)

    前言 之前写了一篇GoDB开发踩坑记但是内容有些不全 xff0c 所以来补充一下 所以没看过GoDB开发踩坑记的可以先看一下那篇文章 正文 golang encode josn 把map string interface 转换为json字符
  • vim配置

    众所周知 xff0c vim是一个非常牛逼的文本编辑器 xff0c 但是他的界面很丑 xff0c 而且在终端下面也不能美化多少 但是 xff01 在windows下有一个叫做gvim的玩意儿 xff0c 在mac下有一个叫macvim的东东
  • 全网最简洁Archlinux 安装教程

    Archlinux 安装教程 先从mirrors ustc edu cn下载archlinux安装镜像 然后下载刻录工具etcher Windows版 xff1a Windows版 Linux版 xff1a Linux版 Mac版 xff1
  • CF6E Exposition题解

    前置知识 st 表 xff1a 用于求静态的区间最值问题 不会的同学可以看wsyear巨佬的这篇文章https blog csdn net wsyear article details 114334351 spm 61 1001 2014
  • 最简单的柯西不等式证明

    柯西不等式证明 柯西不等式 xff0c 是形式如下的不等式 a i 2
  • CF1656E Equal Tree Sums题解

    其实这道题不难 首先假设 1 1 1 是根节点 我看到这道题第一反应就是直接假设整棵树权值之和是某一个定值 xff0c 然后再dfs造每一个 a x
  • CF1656D K-good题解

    这场比赛我没打 xff0c 错失上分好机会 这题是真的水 直接根据题意列出式子 xff1a n 61 k k
  • P7914 [CSP-S 2021] 括号序列 题解

    其实T2想清楚就不是很难 xff0c 虽然想清楚也不简单 我这里分享一种很自然的想法 xff0c 当然是区间dp啦 区间dp分6种状态 的种类数 xff0c 这种情况相当与题目中的 S S S xff0c 2到5中都一样 的种类数 xff0