[DP]JZOJ 5804 简单的序列
Description
其中 (p, q) 满足 |p| + |s| + |q| = n,且 p + s + q 是一个合法的括号序列。
Input
第二行一个长度为 m 的括号序列,表示 s。
Output
输出一行一个整数,表示符合条件的 (p, q) 的数量对 10^9 + 7 取模的值。
Sample Input
【样例 1 输入】 4 1 ( 【样例 2 输入】 4 4 (()) 【样例 3 输入 4 3 (((
Sample Output
【样例 1 输出】 4 【样例 2 输出】 1 【样例 3 输出】 0
Data Constraint
对于 25% 的数据,n ≤ 200;
对于另外 5% 的数据,n = m;
对于 55% 的数据,n − m ≤ 200;
对于 100% 的数据,1 ≤ m ≤ n ≤ 10^5, n − m ≤ 2000。
分析
设一个DP为f[i][j]表示q串长度为i时,左右括号之和(一个1一个-1)为j时的方案数,显然最终答案为f[i][j]*f[n-m-i][j+lenofs]的和
#pragma GCC optimize(2) #include <iostream> #include <cstdio> #include <cstring> using namespace std; const long long P=1e9+7; int n,m; char c[100001]; int s[100001],mins; long long f[2001][2002];int main() {freopen("bracket.in","r",stdin);freopen("bracket.out","w",stdout);scanf("%d%d",&n,&m);scanf("%s",c);int len=strlen(c);mins=2147483647;for (int i=1;i<=len;i++) {s[i]=s[i-1]+(c[i-1]=='('?1:-1);mins=min(mins,s[i]);}f[0][0]=1;for (int i=1;i<=n-m;i++)for (int j=0;j<=i;j++) {if (j) f[i][j]+=f[i-1][j-1];f[i][j]%=P;f[i][j]+=f[i-1][j+1];f[i][j]%=P;}long long ans=0; for (int i=0;i<=n-m;i++)for (int j=0;j<=i;j++)if (j+s[len]<=n-m&&j+mins>=0) ans=(ans+f[i][j]*f[n-m-i][j+s[len]]%P)%P;printf("%lld",ans);fclose(stdin);fclose(stdout); }
View Code
转载于:https://www.cnblogs.com/mastervan/p/9466114.html
[DP]JZOJ 5804 简单的序列相关推荐
- [dp] Jzoj P5804 简单的序列
Description 从前有个括号序列 s,满足 |s| = m.你需要统计括号序列对 (p, q) 的数量. 其中 (p, q) 满足 |p| + |s| + |q| = n,且 p + s + ...
- [JZOJ 5804] 简单的序列
思路: 似乎和某次培训的题很像啊... 将左括号记为1,右括号记为-1,那么最终一定加和为0,然后再求最小前缀和. 用dp解决即可. #include <bits/stdc++.h> us ...
- NOIP模拟测试「简单的区间·简单的玄学·简单的填数·简单的序列」
简单的区间 $update$ 终于$AC$了 找到$(sum[r]+sum[l](sum表示以中间点为基准的sum)-mx)\%k==0$的点 注意这里$sum$表示是以$mid$为基准点,(即$su ...
- DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列随机序列)
DL之RNN:基于TF利用RNN实现简单的序列数据类型(DIY序列数据集)的二分类(线性序列&随机序列) 目录 序列数据类型&输出结果 设计思路 序列数据类型&输出结果 1.t ...
- python如何判断列表是否为空_python简单判断序列是否为空的方法
python简单判断序列是否为空的方法 本文实例讲述了python简单判断序列是否为空的方法.分享给大家供大家参考.具体如下: 假设有如下序列: m1 = [] m2 = () m3 = {} 判断他 ...
- [区间DP]JZOJ 3095 秘密文件
Description 某天,情报局得到了一份秘密文件.文件的内容是加密后的全部由大写字母组成字符串.情报局局长小明想将其发送给远在东方神秘的XX大陆上的老朋友小刘来解密.然而若字符串太长,则需要很长 ...
- 简单DP【p2642】双子序列最大和
Description 给定一个长度为n的整数序列,要求从中选出两个连续子序列,使得这两个连续子序列的序列和之和最大,最终只需输出最大和.一个连续子序列的和为该子序列中所有数之和.每个连续子序列的最小 ...
- 算法与数据结构-DP算法及简单实例
1. 动态规划(DP)算法的基本原理 动态规划过程: 每次决策依赖于当前状态,随即又引起状态转移. 一个决策序列就是在变化的状态中产生的,这种多阶段最优化决策解决问题的过程就称为动态规划. DP求解问 ...
- Luo's oj P1916 简单的序列(bracket)
传送门 分析 我们将左括号看作 1,右括号看作 -1,则一个合法的括号序列需要满足: *所有括号的总和为 0 *每个前缀和均不小于0 我们先统计出串 s 的总和 a 以及最小的前缀和 b,然后枚举串 ...
最新文章
- hive的新分区和旧分区的概念问题
- xcode-select: error: tool 'xcodebuild' requires Xcode错误解决方法
- mybatis配置文件加注释报错怎么办?改一笔就能帮你解决
- Netty工作笔记0005---NIO介绍说明
- Spring Cloud构建微服务架构:消息驱动的微服务(核心概念)【Dalston版】
- 用编程解决生活中的问题
- 重读你不知道的JS (上) 第一节五章
- 第七十三节,css盒模型
- 科目一知识点分类梳理
- 泛微OA流程中调用SAP接口
- 五个核心能力打造普惠金融商业化发展模式
- android系统架构,文件目录
- 学硬件好还是软件好?软件和硬件哪个更吃香?
- 22考研初试成绩公布时间
- Another Day 超好听的BGM
- 信阳师院计算机与信息技术学院,徐丽娟
- 毕设笔记01-解决树莓派烧写系统显示屏不显示问题
- 并查集——银河英雄传说()
- 【山外问道】什么是UUID
- 福州大学数学计算机学院,福州大学数学与计算机科学学院导师介绍:廖祥文