http://codeforces.com/contest/314/problem/E

题意:

原本有一个合法的括号序列

擦去了所有的右括号和部分左括号

问有多少种填括号的方式使他仍然是合法的括号序列

括号有25种,序列长度<=1e5

传统的做法:

令dp[i][j]表示当前到第i个字符,现在还有j个左括号
若第i+1个字符是左括号,则能转移到dp[i+1][j+1]
若第i+1个字符是问号,则能转移到dp[i+1][j-1]与dp[i+1][j+1]
时间复杂度为O(n^2)
 
换种思路
再看这道题,他与传统的括号序列的不同之处是他擦去了所有的右括号
令dp[k][i]表示 假设括号只有一种,前k个里面,填了i个右括号的方案数
如果第i个是问号
若当前可以填左括号 dp[k][i]+=dp[k-1][i]
若当前可以填右括号 dp[k][i]+=dp[k-1][i-1]
dp[n][n/2]就是如果只有一种括号,使序列合法的方案数
现在有25种括号,假设序列中已有q个左括号
那么最终答案=25^(n/2-q) * dp[n][n/2]
 
这个感觉上去也是n^2的
首先把第一维压去,解决空间问题
考虑j的枚举范围
前i个里面,至多有i/2 [下取整] 个右括号
至多可以填m个左括号,所以至少有i-n/2个右括号
平摊复杂度我就不知道了
 
对2^32取模相当于unsigned int 自然溢出
 
然后就过了,跑的还很快
#include<cstdio>

using namespace std;

#define N 100002

char s[N];

unsigned int f[N<<];

int main()
{
int n;
scanf("%d",&n);
if(n&)
{
putchar('');
return ;
}
scanf("%s",s+);
int m=n>>,q=;
f[]=;
for(int i=;i<=n;++i)
if(s[i]=='?')
for(int j=i>>;j && j>=i-m;--j) f[j]+=f[j-];
else q++;
unsigned int ans=f[m];
for(int i=;i<=m-q;++i) ans*=;
printf("%u",ans);
}

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

  1. CF 314 E. Sereja and Squares

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

  2. codeforces 314E Sereja and Squares

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

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

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

  4. Codeforces.314E.Sereja and Squares(DP)

    题目链接 http://www.cnblogs.com/TheRoadToTheGold/p/8443668.html \(Description\) 给你一个擦去了部分左括号和全部右括号的括号序列, ...

  5. Codeforces Round #243 (Div. 1)——Sereja and Squares

    题目链接 题意: 给n个点,求能组成的正方形的个数. 四边均平行与坐标轴 大神的分析: 经典题 我们考虑每一种x坐标,显然仅仅有<= sqrt{N}个x坐标出现了> sqrt{N}次,我们 ...

  6. 【codeforces 314C】Sereja and Subsequences

    [题目链接]:http://codeforces.com/problemset/problem/314/C [题意] 让你从n个元素的数组中选出所有的不同的非递减子数列; 然后计算比这个子数列小的和它 ...

  7. 【27.40%】【codeforces 599D】Spongebob and Squares

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  8. CodeForces - 367E:Sereja and Intervals(组合数&&DP)

    Sereja is interested in intervals of numbers, so he has prepared a problem about intervals for you. ...

  9. 【codeforces 367C】Sereja and the Arrangement of Numbers

    [题目链接]:http://codeforces.com/problemset/problem/367/C [题意] 我们称一个数列a[N]美丽; 当且仅当,数列中出现的每一对数字都有相邻的. 给你n ...

随机推荐

  1. Git管理多个SSH密钥,Git多帐号配置

    版权声明:转载须标明本文转自严振杰的博客 https://blog.csdn.net/yanzhenjie1003/article/details/69487932版权声明:转载必须注明本文转自严振杰 ...

  2. Spring+SpringMVC+MyBatis整合基础篇(二)牛刀小试

    前言 承接上文,该篇即为项目整合的介绍了. 废话不多说,先把源码和项目地址放上来,重点要写在前面. 项目展示地址,点这里http://ssm-demo.13blog.site,账号:admin 密码: ...

  3. 一种C#泛型方法在lua中表示的设计

    在进行lua方法注册的时候, 大多数解决方案直接否定了泛型方法, 因为在lua侧难以表达出泛型, 以及lua的函数重载问题, 函数重载问题可以通过一些特殊方法解决, 而泛型问题是主要问题, 以Unit ...

  4. xss基础

    0x0 定义 总结: (1)     在页面显示 (2)     用户可控 满足以上两点就有可能存在xss 0x1反射型 0x2存储型 0x3 DOM型 与反射型相似 也是从get等参数传参 但 反射 ...

  5. windows8/10+Ubuntu Kylin(优麒麟)双系统

    1.参考资料:http://www.jianshu.com/p/2eebd6ad284d 中第三种U盘启动方式安装完成 2.安装过程: (1)首先将一个盘空出来,做好其中数据的备份.启动win+X磁盘 ...

  6. idea 使用 mybaits generator

    Intellij IDEA 14 作为JavaIDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱. 然而在使用的过程中会 ...

  7. 03-java学习-基本数据类型-运算符-键盘接收用户输入

    java的八大基本数据类型: 类型转换的基本原则: java整数的默认类型是int,小数的默认类型是double 运算符: 算术运算符.连接.赋值.关系.逻辑.三目运算符等…… 键盘接收用户输入: j ...

  8. Linux命令(十四) 查看工作目录文件 ls

    目录 1.命令简介 2.常用参数介绍 3.实例 4.直达底部 命令简介 ls 命令是 Linux 下最常用的命令. ls 就是 list 的缩写.默认情况下 ls 命令用来打印出当前目录的清单, 如果 ...

  9. Win2008r2 由ESXi 转换到 HyperV的处理过程

    1. 大部分2008r2 采取了 windows loader的方式激活 这种方式 会导致hyperV 启动失败 因为他家在了错误的bios类型 所以第一步建议 使用windows loader 卸载 ...

  10. flex与滚动冲突

    如果设置方向用了flex,那么用滚动就没用