题目链接

http://www.cnblogs.com/TheRoadToTheGold/p/8443668.html

\(Description\)

给你一个擦去了部分左括号和全部右括号的括号序列,括号有25种,用除x之外的小写字母a~z表示。求有多少种合法的括号序列。答案对4294967296取模。

合法序列不能相交,如()[],([])是合法序列,而([)]是不合法的。

\(Solution\)

很重要的一点是,如果当前可以放右括号,那么方案是唯一的(不能相交)。

假设只有一种括号。

用\(f[i][j]\)表示\(1\sim i\),还有\(j\)个左括号未匹配的方案数。根据当前是什么转移即可。复杂度\(O(n^2)\)。

空间可以压成\(O(n)\)。考虑优化枚举范围,但是\(j\)的下界是\(0/1\),上界是\(\min(i,n/2)\),没啥好优化的。

只能尝试换种状态表示,\(f[i][j]\)表示\(1\sim i\),已经填了\(j\)个右括号的方案数。

则若\(i+1\) 为/可以放 左括号,\(f[i+1][j] =/+= f[i][j]\);若\(i+1\)可以放右括号,则\(f[i+1][j+1] += f[i][j]\)。

这样只有一种括号的答案是\(f[n][n/2]\)。假设原串有\(m\)个左括号,则25种括号的答案为\(25^{n/2-m}*f[n][n/2]\)(右括号确定,只需看左括号方案)。

\(j\)的下界是\(\max(1,i-n/2)\),上界可以按\(i/2\)算。平摊复杂度不知道,还是\(n^2\)的。。但跑得很快。

对\(4294967296=2^{32}\)取模相当于unsigned int自然溢出。

//1372ms	300KB
#include <cstdio>
#include <algorithm>
typedef unsigned int uint;
const int N=1e5+5; char s[N];
uint f[N]; int main()
{
int n; scanf("%d",&n);
if(n&1) return putchar('0'),0;
scanf("%s",s+1); f[0]=1; int m=0, n2=n>>1;
for(int i=1; i<=n; ++i)
if(s[i]=='?')
for(int j=i>>1,lim=std::max(1,i-n2); j>=lim; --j)
f[j]+=f[j-1];
else ++m;
if(n2<m) return putchar('0'),0;
for(int i=n2-m; i--; ) f[n2]*=25;
printf("%u",f[n2]); return 0;
}

Codeforces.314E.Sereja and Squares(DP)的更多相关文章

  1. codeforces 314E Sereja and Squares

    discription Sereja painted n points on the plane, point number i (1 ≤ i ≤ n) has coordinates (i, 0). ...

  2. Codeforces 425E Sereja and Sets dp

    Sereja and Sets 我们先考虑对于一堆线段我们怎么求最大的不相交的线段数量. 我们先按 r 排序, 然后能选就选. 所以我们能想到我们用$dp[ i ][ j ]$表示已经选了 i 个线段 ...

  3. codeforces 425D Sereja and Squares n个点构成多少个正方形

    输入n个点,问可以构成多少个正方形.n,xi,yi<=100,000. 刚看题的时候感觉好像以前见过╮(╯▽╰)╭最近越来越觉得以前见过的题偶尔就出现类似的,可是以前不努力啊,没做出来的没认真研 ...

  4. cf314E. Sereja and Squares(dp)

    题意 题目链接 给你一个擦去了部分左括号和全部右括号的括号序列,括号有25种,用除x之外的小写字母a~z表示.求有多少种合法的括号序列.答案对4294967296取模.合法序列不能相交,如()[],( ...

  5. CF 314 E. Sereja and Squares

    E. Sereja and Squares http://codeforces.com/contest/314/problem/E 题意: 给你一个擦去了部分左括号和全部右括号的括号序列,括号有25种 ...

  6. [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆)

    [BZOJ 3625] [Codeforces 438E] 小朋友的二叉树 (DP+生成函数+多项式开根+多项式求逆) 题面 一棵二叉树的所有点的点权都是给定的集合中的一个数. 让你求出1到m中所有权 ...

  7. codeforces 425C Sereja and Two Sequences(DP)

    题意读了好久才读懂....不知道怎么翻译好~~请自便~~~ http://codeforces.com/problemset/problem/425/C 看懂之后纠结好久...不会做...仍然是看题解 ...

  8. CodeForces - 314C Sereja and Subsequences (树状数组+dp)

    Sereja has a sequence that consists of n positive integers, a1, a2, ..., an. First Sereja took a pie ...

  9. Codeforces 314 E. Sereja and Squares

    http://codeforces.com/contest/314/problem/E 题意: 原本有一个合法的括号序列 擦去了所有的右括号和部分左括号 问有多少种填括号的方式使他仍然是合法的括号序列 ...

随机推荐

  1. Hadoop生态圈-Kafka配置文件详解

    Hadoop生态圈-Kafka配置文件详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.默认kafka配置文件内容([yinzhengjie@s101 ~]$ more /s ...

  2. python操作txt文件中数据教程[2]-python提取txt文件

    python操作txt文件中数据教程[2]-python提取txt文件中的行列元素 觉得有用的话,欢迎一起讨论相互学习~Follow Me 原始txt文件 程序实现后结果-将txt中元素提取并保存在c ...

  3. vue ssr服务端渲染

    SSR:Server Side Rendering(服务端渲染) 目的是为了解决单页面应用的 SEO 的问题,对于一般网站影响不大,但是对于论坛类,内容类网站来说是致命的,搜索引擎无法抓取页面相关内容 ...

  4. bzoj千题计划254:bzoj2286: [Sdoi2011]消耗战

    http://www.lydsy.com/JudgeOnline/problem.php?id=2286 虚树上树形DP #include<cmath> #include<cstdi ...

  5. [转载]五理由 .NET开发者应该关注HTML 5

    http://developer.51cto.com/art/201107/275039.htm

  6. [转载]Juicer – 一个Javascript模板引擎的实现和优化

    http://ued.taobao.org/blog/2012/04/juicer-%E4%B8%80%E4%B8%AAjavascript%E6%A8%A1%E6%9D%BF%E5%BC%95%E6 ...

  7. JavaScript编写风格指南 (二)

    七:注释 // 频繁的使用注释有助于他人理解你的代码// 1.代码晦涩难懂// 2.可能被误认为是错误的代码// 3.必要但不明显的针对特定浏览器的代码// 4.对于对象,方法或者属性,生成文档是有必 ...

  8. iOS常用小功能

    CHENYILONG Blog 常用小功能 技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong  ...

  9. TrID文件类型识别linux版

    读取文件头根据特征码进行文件类型匹配. 官方:http://mark0.net/soft-trid-e.html windows版本小工具:FileAnalysis 以下是linux版本 wget h ...

  10. IE浏览器如何调试Asp.net的 js代码

    不管我们开发什么项目,都需要使用调试.后端的调试比较简单.前端js调试稍微复杂了一点,但是也别怕,因为我们有很多调试前端js代码的浏览器工具.比如IE浏览器.firefox浏览器.chrome浏览器等 ...