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

news/2025/10/27 21:50:31/文章来源:https://www.cnblogs.com/Sinktank/p/19170210

P7914 [CSP-S 2021] 括号序列

学习了 题解 P7914 【[CSP-S 2021] 括号序列】 - enucai 后进行记录。感谢原作者~


下文用 \(K\) 表示输入的 \(k\)

考虑区间 DP。

定义 \(f_{i,j,k\in\{0,1,2,3,4,5\}}\) 为区间 \([i,j]\),状态为 \(k\) 的答案。

其中:

  • \(k=0\) 表示区间形如 ***...***(全为 *)。
  • \(k=1\) 表示区间形如 (...)(单个括号序列)。
  • \(k=2\) 表示区间形如 (...)...*(以括号序列开头,以星号结尾)。
  • \(k=3\) 表示区间形如 (...)...(...)(以括号序列开头,以括号序列结尾。包含 \(k=1\) 的状态)。
  • \(k=4\) 表示区间形如 *...(...)(以星号开头,以括号序列结尾)。
  • \(k=5\) 表示区间形如 *...*(以星号开头,以星号结尾。包含 \(k=0\) 的状态)。

则有转移:

  • \(f_{i,j,0}=\begin{cases} f_{i,j-1,0}\times [s_i=\texttt{* }\text{or}\texttt{ ?}]&j-i+1\le K\\ 0&\text{otherwise.} \end{cases}\)

  • \(f_{i,j,1}=(f_{i+1,j-1,0}+f_{i+1,j-1,2}+f_{i+1,j-1,4}+f_{i+1,j-1,5})\times \text{compare}(i,j)\)

    • 其中 \(\text{compare}(i,j)\) 表示 \(i,j\) 能否配对为左右括号。
  • \(f_{i,j,2}=\sum_{k=i}^{j-1} f_{i,k,3}\times f_{k+1,j,0}\)

  • \(f_{i,j,3}=f_{i,j,1}+\sum_{k=i}^{j-1} (f_{i,k,2}+f_{i,k,3})\times f_{k+1,j,1}\)

    • \(f_{i,j,1}\) 和后面的式子的统计是不重不漏的,因为前者是恰好 \(1\) 个括号序列,后者是 \(>1\) 个括号序列。
  • \(f_{i,j,4}=\sum_{k=i}^{j-1} f_{i,k,0}\times f_{k+1,j,3}\)

    • \(f_{i,j,2}\) 的递推类似。
  • \(f_{i,j,5}=f_{i,j,0}+\sum_{k=i}^{j-1} f_{i,k,4}\times f_{k+1,j,0}\)

    • \(f_{i,j,0}\) 和后面的式子的统计是不重不漏的,因为前者是恰好 \(0\) 个括号序列,后者是 \(>0\) 个括号序列。

时间复杂度就是普通区间 DP 的 \(O(n^3)\)

点击查看代码
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=502,P=1e9+7;
int n,k,f[N][N][6];
string s;
inline bool match(char x,char y){return (x=='('||x=='?')&&(y==')'||y=='?');}
signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n>>k>>s,s=' '+s;for(int i=1;i<=n;i++) f[i][i-1][0]=1;for(int len=1;len<=n;len++){for(int i=1,j;(j=i+len-1)<=n;i++){f[i][j][0]=(len<=k)*(f[i][j-1][0]&(s[j]=='*'||s[j]=='?'));if(len>=2){f[i][j][1]=match(s[i],s[j])*(f[i+1][j-1][0]+f[i+1][j-1][2]+f[i+1][j-1][3]+f[i+1][j-1][4])%P;for(int k=i;k<j;k++){(f[i][j][2]+=f[i][k][3]*f[k+1][j][0])%=P;(f[i][j][3]+=(f[i][k][2]+f[i][k][3])*f[k+1][j][1])%=P;(f[i][j][4]+=f[i][k][0]*f[k+1][j][3])%=P;(f[i][j][5]+=f[i][k][4]*f[k+1][j][0])%=P;}}(f[i][j][3]+=f[i][j][1])%=P;(f[i][j][5]+=f[i][j][0])%=P;}}cout<<f[1][n][3]<<"\n";return 0;
}

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

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

相关文章

Windows11安装miniconda

Windows11安装miniconda1. 下载地址https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda操作系统和芯片架构 文件MacOS Intel Chip Miniconda3-latest-MacOSX-x86_64.shMacOS Apple Silicon Miniconda3-latest-M…

【中份薯条】雷柏MT760鼠标上手改装

🍟现在登场的是 Master3 的异父异母亲兄弟 雷柏MT760 改装笔记。兄弟,你也要来点薯条吗?这里有中份的🍟 前言之前买的罗技 G502无线版 和 MX ERGO 在我的高强度使用下,都是先坏微动再坏外壳,罗技发挥相当稳定�…

102302116 田自豪 作业1

作业1 1)用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。 代码与运行结果点击查看代码 import requests from bs4 imp…

实验二:现代C++编程初体验

T.h#pragma once #include <string> // 类T: 声明 class T {// 对象属性、方法 public:T(int x = 0, int y = 0); // 普通构造函数T(const T& t); // 复制构造函数T(T&& t); // 移动构造函数~T(); /…

公众号排版神器:2025年最新顶级AI排版软件索引指南

导语:公众号排版设计总是耗时耗力,容易出错,有什么高效工具能解决这个问题? 公众号运营者常面临排版慢、样式不统一、平台合规风险等痛点。例如,一篇千字文章手动排版需1-2小时,稍不留神可能触发违规词,导致被平…

第四篇:docker底层原理

第四篇:docker底层原理chroot技术(容器底层使用了chroot技术) chroot是一种通过改变进程的根目录来创建隔离文件系统环境的技术ldd命令用于显示二进制可执行文件或共享库所依赖的所有动态链接库# 1.创建工作目录 [r…

【中份薯条】雷柏MT760上手改装

兄弟,你也要来点薯条吗?这里有中份的🍟 前言之前买的罗技 G502无线版 和 MX ERGO 在我的高强度使用下,都是先坏微动再坏外壳,罗技发挥相当稳定🤤 那么接替 G502 的是: Master3 的异父异母亲兄弟 雷柏 MT760�…

软件测试和DevOps的关系

软件测试是 DevOps 成功实践的基石和保障,而 DevOps 为软件测试带来了革命性的挑战和机遇。它们不是对立的关系,而是深度融合、相互依赖的共生关系。你可以把测试看作是贯穿 DevOps 流水线的“质量守护神”。下面我们…

PyPDF无限循环漏洞CVE-2025-62707技术分析

本文详细分析了PyPDF库中的CVE-2025-62707安全漏洞,该漏洞在处理缺少EOF标记的DCT内联图像时会导致无限循环。文章包含漏洞描述、影响版本、解决方案和CVSS评分等技术细节,帮助开发者理解和防范此类安全问题。CVE-20…

重组蛋白技术概述

重组蛋白技术概述重组蛋白是通过基因工程技术在体外表达的蛋白质分子。该技术将目标基因序列导入表达载体,转化至宿主细胞中,利用细胞的转录翻译机制合成蛋白质。重组蛋白技术在生命科学研究中已成为不可或缺的工具,…

题解:luogu P4948 数列求和

题解:luogu P4948 数列求和 要求: \[\sum_{i = 1}^{n}{i^k a^i} \]其中 \(n \leq 10^{18},k \leq 2000\) 这种 \(k\) 次方但是 \(k\) 特别小的一般都是将 \(i^k\) 通过斯特林数展开。 由: \[x^n=\sum_{i = 0}^{n}{i…

关于springboot+Servlet报错404的问题

假如遇到使用springboot+Servlet的方式进行开发或者学习(一般是作业),其中有个经常遇到的问题是访问不到,会报404的错误,资源未加载; 网上有很多解决方法,例如加ServletComponentScan()包扫描路径,但是我帮一…

10.27 CSP-S模拟40 改题记录

爆零场HZOJ 写在前面 没想到离CSP还有4天然后创造了一次保龄的经历。。。然后就是读假题专场。其实感觉没有太难但是。。。好吧,碍于时间不多,也不说废话了。A. 公约数神庙 我无言。我以为我败在了空间,结果其实是败…

Codechef Painting Tree 题解 [ 蓝 ] [ 树形 DP ] [ 概率期望 ] [ 分类讨论 ]

Painting Tree 若干个月前模拟赛切的题,当时写了 3h+,被细节恶心坏了,遂记之。 题意可以转化为求树上存在相交链的期望时间。 考虑如何计算这个期望。显然我们可以枚举选取链的个数,根据期望的定义式来算: \[E(X)…

Linux运行命令三种方式对比

三种方式临时测试 → nohup 稳定运行 → supervisor 系统级守护 → systemd测试用例/data/test.sh #!/bin/bash # /data/test.sh - Linux 简单输出时间的 demo 脚本while true doecho "$(date +%Y-%m-%d %H:%M:%S…

P14322 「ALFR Round 11」E 空崎ヒナ 题解 (markdown)

P14322 「ALFR Round 11」E 空崎ヒナ 题解 (markdown)## P14322 「ALFR Round 11」E 空崎ヒナ 题解**Sorasaki Hina 赛高!**也是做上 BA 的题了!也是写上 BA 的题的题解了!我们 BA 厨的日子真是蒸蒸日上啊!求审核大…

详细介绍:论文阅读 (1) :Control Flow Management in Modern GPUs

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

公众号排版2025年权威推荐:揭秘有一云AI编辑器为何高效?

01|痛点雷区清单:为什么总被“排版”拖慢?层级乱:复制到后台后行距、间距、引用样式全乱,返工 ≥ 2 轮。 版式碎:字体、分隔、留白没节奏,读者滑两屏就流失。 配图难:素材东拼西凑、风格不统一,还担心侵权。 …

P14322 「ALFR Round 11」E 空崎ヒナ 题解

Sorasaki Hina 赛高!P14322 「ALFR Round 11」E 空崎ヒナ 题解 Sorasaki Hina 赛高! 也是做上 BA 的题了!也是写上 BA 的题的题解了!我们 BA 厨的日子真是蒸蒸日上啊! 求审核大大通过 QvQ。求求了! 题目描述:给…

[题解]P7074 [CSP-J 2020] 方格取数

P7074 [CSP-J 2020] 方格取数 如果设 \(f_{i,j}\) 为 \((1,1)\) 到 \((i,j)\) 的最大权值和,上下相邻的两个元素的转移就是双向的了。有后效性,无法 DP。不过题目说“不能重复经过已经走过的方格”,也就是说每一列只…