括号序列模型--序列dp--U86873 小Y的精灵国机房之旅
括号序列模型及解法
>Codeforces314E
◦给定一个长度为n的仅包含左右括号和问号的字符串,将问号变成左括号
或右括号使得该括号序列合法,求方案总数。
◦例如(())与()()都是合法的括号序列。
◦ n<=3000。
>Solution
◦括号序列问题,往往就是把左括号看成+1,右括号看成-1,我们只需要
保证任意一个前缀大于等于0,且总和为0,就代表是个合法括号序列了。
◦令dp[i][j]表示当前到第i个字符,现在的前缀和
◦那么分三种情况考虑。
◦若第i+1个字符是左括号,则能转移到dp[i+1][j+1]。
◦若第i+1个字符是右括号,则能转移到dp[i+1][j-1]。
◦若第i+1个字符是问号,则能转移到dp[i+1][j-1]与dp[i+1][j+1]。
◦最终dp[n][0]就是方案总数啦。
◦时间复杂度为O(n^2)。
U86873 小Y的精灵国机房之旅

题解
括号序列模型唉!
所以就可以套用上面的式子啦
把Y看做左括号,H看做右括号,C看做问号
准备AC
#include<iostream>
#include<bits/stdc++.h>
using namespace std; typedef long long ll; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} const int maxn=,mod=1e9+;
int n;
char a[maxn];
int f[][]; int main()
{
n=read();
scanf("%s",a+);
f[][]=;
for(int i=;i<=n;i++){
if(a[i]=='Y'){
f[i][]=;
for(int j=;j<=i;j++){
f[i][j]=f[i-][j-];
}
}
if(a[i]=='H'){
for(int j=;j<i;j++){
f[i][j]=f[i-][j+];
}
f[i][i]=;
}
if(a[i]=='C'){
for(int j=;j<i;j++){
f[i][j]=(f[i-][j-]+f[i-][j+])%mod;
}
f[i][]=f[i-][];
f[i][i]=f[i-][i-];
}
}
printf("%d\n",f[n][]%mod);
return ;
}
然后发现不对劲。。。。。

二维数组一定会炸。。。。
那就。。。循环队列!
我们发现每次到新的一个 i ,它只和 i-1 有关,所以 i-1 用过一次就可以销毁了,不然也是占空间
可以像这样&1来实现循环利用

代码
#include<iostream>
#include<bits/stdc++.h>
using namespace std; typedef long long ll; inline int read()
{
int ans=;
char last=' ',ch=getchar();
while(ch<''||ch>'') last=ch,ch=getchar();
while(ch>=''&&ch<='') ans=ans*+ch-'',ch=getchar();
if(last=='-') ans=-ans;
return ans;
} const int maxn=,mod=1e9+;
int n;
char a[maxn];
int f[][maxn]; int main()
{
n=read();
scanf("%s",a+);
memset(f,,sizeof(f));
f[][]=;
for(int i=;i<=n;i++){
if(a[i]=='Y'){
f[i&][]=;
for(int j=;j<=i;j++){
f[i&][j]=f[(i-)&][j-];
}
}
if(a[i]=='H'){
for(int j=;j<i;j++){
f[i&][j]=f[(i-)&][j+];
}
f[i&][i]=;
}
if(a[i]=='C'){
f[i&][]=f[(i-)&][];
for(int j=;j<i;j++){
f[i&][j]=(f[(i-)&][j-]+f[(i-)&][j+])%mod;
}
f[i&][i]=f[(i-)&][i-];
}
}
printf("%d\n",f[n&][]%mod);
return ;
}
括号序列模型--序列dp--U86873 小Y的精灵国机房之旅的更多相关文章
- 区间和序列上的dp
区间上的dp状态设计最基本的形式: \(F[i]\)表示以i结尾的最优值或方案数. \(F[i][k]\)表示以i结尾附加信息为k的最优值或方案数. 当然可以有多维附加信息. 转移的话往往是枚举上一个 ...
- DeepLearning.ai学习笔记(五)序列模型 -- week1 循环序列模型
一.为什么选择序列模型 序列模型可以用于很多领域,如语音识别,撰写文章等等.总之很多优点... 二.数学符号 为了后面方便说明,先将会用到的数学符号进行介绍. 以下图为例,假如我们需要定位一句话中人名 ...
- Coursera Deep Learning笔记 序列模型(一)循环序列模型[RNN GRU LSTM]
参考1 参考2 参考3 1. 为什么选择序列模型 序列模型能够应用在许多领域,例如: 语音识别 音乐发生器 情感分类 DNA序列分析 机器翻译 视频动作识别 命名实体识别 这些序列模型都可以称作使用标 ...
- [LOJ#2324]「清华集训 2017」小Y和二叉树
[LOJ#2324]「清华集训 2017」小Y和二叉树 试题描述 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙 ...
- 【luoguP4006 清华集训2017】小Y和二叉树
题目描述 小 Y 是一个心灵手巧的 OIer,她有许多二叉树模型. 小 Y 的二叉树模型中,每个结点都具有一个编号,小 Y 把她最喜欢的一个二叉树模型挂在了墙上,树根在最上面,左右子树分别在树根的左下 ...
- Loj #2324. 「清华集训 2017」小 Y 和二叉树
Loj #2324. 「清华集训 2017」小 Y 和二叉树 小Y是一个心灵手巧的OIer,她有许多二叉树模型. 小Y的二叉树模型中,每个结点都具有一个编号,小Y把她最喜欢的一个二叉树模型挂在了墙上, ...
- 括号序列(区间dp)
括号序列(区间dp) 输入一个长度不超过100的,由"(",")","[",")"组成的序列,请添加尽量少的括号,得到一 ...
- hdu 4521 小明系列问题——小明序列(线段树+DP或扩展成经典的LIS)
小明系列问题--小明序列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Tot ...
- 牛客练习赛44 A 小y的序列 (模拟,细节)
链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...
随机推荐
- Dubbo 配置参数
关闭启动检查 在dubbo多模块项目启动的时候为了并行启动多个服务,缩短启动时间,需要解除模块之间的依赖检测 dubbo.consumer.check=false @Reference(check = ...
- 关于写SQL语句的技巧
一.SQL总结写法 SQL的写法无非就是几种,关联查询,子查询,分组函数,各种函数的使用 1.首先根据要做的需求,先分析一下,需要用到哪些查询,例如要用到关联查询,就先把用到的表列出来,比如a,b,c ...
- CentOS7中使用yum安装Nginx的详细步骤
1.添加源 rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarc ...
- SpringCloud之Feign声明式调用原理及配置
1 什么是Feign Feign是一种声明式.模板化的HTTP客户端(仅在Application Client中使用).声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求. ...
- List集合复制
方法一: public static void main(String[] args) { // TODO Auto-generated method stub List<String> ...
- CentOS系统 Amoeba+MySql主从读写分离配置 适合新手傻瓜式教程!-----仅供参考!
废话不说,直接开始: 一.安装mysql的三种方式,这里采用第2种(安装方式不再详解,请参照) http://www.cnblogs.com/babywaa/articles/4837946.html ...
- web开发:形变、表格及多行文本操作
一.2d形变 二.动画 三.表格 四.多个文本垂直居中 五.小米形变案例 一.2d形变 /*1.形变参考点: 三轴交界点*/transform-origin: x轴坐标 y轴坐标; /*2.旋转 ro ...
- gitlab常用的命令
git checkout . #本地所有修改的.没有的提交的,都返回到原来的状态git stash #把所有没有提交的修改暂存到stash里面.可用git stash pop回复.git reset ...
- Zabbix Web 中文字体显示问题
- 如何在网页标题栏title加入logo(icon)图标?
打开某一个网页会在浏览器的标签栏处显示该网页的标题和图标,当网页被添加到收藏夹或者书签中时也会出现网页的图标,怎么在网页title左边显示网页的logo图标呢? 方法一(被动式): 制作一个ico格式 ...