题目大意:给你一个长度为$n$的括号序列$T$,要求你构造一个长度为$2n$的括号序列$S$,保证这个括号序列在插入数字后一定是正确的,并且$T$是$S$的一个子串

还以为是什么纯粹的数学构造题,一通乱搞无果。好吧,并没有想到$KMP$....

题解:首先用$KMP$预处理出数组$to[i][0/1]$,表示在$i+1$位填上括号$'('$和$')'$后匹配到字符串T的位置

定义$f[i][j][k][0/1]$表示已经添加了$i$个括号,左右括号数量之差是$j$,已经匹配到了字符串$T$的第$k$位,是否包含$T$串

再用$DP$转移即可,实现很简单

 #include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 205
#define maxn 250
#define uint unsigned int
#define ll long long
#define mod 1000000007
using namespace std; int n,len;
char str[N];
uint f[N][N][N][];
int nxt[N],to[N][];
void get_nxt()
{
int i=,j=;nxt[]=;
while(i<=len){
if(j==||str[i]==str[j]){
i++,j++;nxt[i]=j;
}else{j=nxt[j];}
}
for(int i=,k;i<len;i++)
{
k=i;
if(str[i+]=='('){
to[i][]=k+;k=k+;
for(;str[k]!=')'&&k;k=nxt[k]);
to[i][]=k;
}else{
to[i][]=k+;k=k+;
for(;str[k]!='('&&k;k=nxt[k]);
to[i][]=k;
}
}
} int main()
{
scanf("%d",&n);
scanf("%s",str+);
len=strlen(str+);
get_nxt();
f[][][][]=;
for(int i=;i<*n;i++)
{
for(int j=;j<=n;j++){
for(int k=;k<len;k++)
{
if(j<n)(f[i+][j+][to[k][]][to[k][]==len]+=f[i][j][k][])%=mod; //'('
if(j>)(f[i+][j-][to[k][]][to[k][]==len]+=f[i][j][k][])%=mod; //')'
}
if(j<n)(f[i+][j+][len][]+=f[i][j][len][])%=mod;
if(j>)(f[i+][j-][len][]+=f[i][j][len][])%=mod;
}
}
int num=;
printf("%u\n",f[*n][][len][]);
return ;
}

最新文章

  1. iframe使用方法
  2. jQuery 移动端ajax请求列表数据,实现点击翻页效果(还有手势往下滑动翻页)。
  3. FoxMail的Bug
  4. JQuery validate 在IE兼容模式下出现 js错误(成员找不到)的修正:
  5. Android内存管理(4)*官方教程 含「高效内存的16条策略」 Managing Your App&#39;s Memory
  6. 05DotNet基本常用类库
  7. Gas Station——LeetCode
  8. 通过netty实现服务端与客户端的长连接通讯,及心跳检测。
  9. 解决编译时出现的警告:format string is not a string literal (potentially insecure)
  10. BZOJ2141 排队 树状数组 分块
  11. css div相对屏幕永远居中
  12. tomcat环境多个jdk版本自定义使用JDK版本及路径
  13. Bootstrap3基础 container 浏览器宽度与容器宽度的四种配合
  14. L260
  15. new date() 计算本周周一日期
  16. QueenPuzzle-N皇后问题
  17. 归并排序的理解和实现(Java)
  18. hadoop出现error包问题记录
  19. php留言系统(9)
  20. JAVA - JDK 1.8 API 帮助文档-中文版

热门文章

  1. nginx上搭建https
  2. ajax第二天学习
  3. How Google Backs Up The Internet Along With Exabytes Of Other Data
  4. async-validator 的中文文档翻译
  5. [HDU1052]Tian Ji -- The Horse Racing(田忌赛马)
  6. 编写python代码获取4k高清壁纸
  7. linux mint(Ubuntu、Debian) 18修改环境变量
  8. php学习之道:php empty()和isset()的差别
  9. U盘无法格式化的恢复
  10. Java 实现适配器(Adapter)模式