题意:给你一个长度为n的括号匹配串(不一定恰好匹配),让你在这个串的前面加p串和后面加上q串,使得这个括号串平衡(平衡的含义是对于任意位置的括号前缀和大于等于0,且最后的前缀和为0)。

思路:枚举这个字符串前面p字符串的长度,我们可以使得p字符串的前缀和大于等于字符串s的最小前缀和minx,那么p+s就符合前缀和大于等于0,然后q的方案数也能确定了。我们用dp[i][j]表示i个括号平衡度为j的方案数,那么可以先预处理出来dp的值。然后我们算出s字符串的最小前缀和minx,最后我们只要枚举p的长度i和平衡度j,那么sum+=dp[i][j]*dp[n-m-i][per_s+j],(per_s是整个s字符串的平衡度,per_s+j为q的平衡度).

 1 #include<iostream>
 2 #include<string>
 3 #include<algorithm>
 4 #include<cstdlib>
 5 #include<cstdio>
 6 #include<set>
 7 #include<map>
 8 #include<vector>
 9 #include<cstring>
10 #include<stack>
11 #include<cmath>
12 #include<queue>
13 #define clc(a,b) memset(a,b,sizeof(a))
14 #include <bits/stdc++.h>
15 using namespace std;
16 #define LL long long
17 const int maxn= 100050;
18 const int inf=0x3f3f3f3f;
19 char s[maxn];
20 const int mod=1000000007;
21 LL dp[2050][2050];
22
23 int main()
24 {
25     int n,m;
26     scanf("%d%d",&n,&m);
27     scanf("%s",s+1);
28     clc(dp,0);
29     dp[0][0]=1;
30     for(int i=1; i<=n-m; i++)
31     {
32         for(int j=0; j<=i; j++)
33         {
34             if(j>0)
35                 dp[i][j]=(dp[i][j]+dp[i-1][j-1])%mod;
36             dp[i][j]=(dp[i][j]+dp[i-1][j+1])%mod;
37         }
38     }
39     int minx=inf;
40     int per_s=0;
41     for(int i=1; i<=m; i++)
42     {
43         if(s[i]=='(')
44             per_s++;
45         else
46             per_s--;
47         minx=min(minx,per_s);
48     }
49     LL sum=0;
50     for(int i=0; i<=n-m; i++)
51         for(int j=0; j<=i; j++)
52         {
53             if(j+minx>=0&&j+per_s<=n-m-i)
54                 sum=(sum+dp[i][j]*dp[n-m-i][j+per_s])%mod;
55         }
56     cout<<sum<<endl;
57     return 0;
58 }

View Code

转载于:https://www.cnblogs.com/ITUPC/p/5208636.html

codeforces629C Famil Door and Brackets (dp)相关推荐

  1. 【CF 149D】Coloring Brackets(dp)

    [CF 149D]Coloring Brackets(dp) D. Coloring Brackets time limit per test 2 seconds memory limit per t ...

  2. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  3. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  4. LeetCode 1220. 统计元音字母序列的数目(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个整数 n,请你帮忙统计一下我们可以按下述规则形成多少个长度为 n 的字符串: - 字符串中的每个字符都应当是小写元音字母('a', 'e', 'i ...

  5. LeetCode 265. 粉刷房子 II(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成 k 种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同. 当然,因为市场上不同颜色油 ...

  6. LeetCode 256. 粉刷房子(DP)

    文章目录 1. 题目 2. 解题 1. 题目 假如有一排房子,共 n 个,每个房子可以被粉刷成红色.蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其与相邻的两个房子颜色不能相同. 当然,因 ...

  7. LeetCode 1223. 掷骰子模拟(DP)

    1. 题目 有一个骰子模拟器会每次投掷的时候生成一个 1 到 6 的随机数. 不过我们在使用它时有个约束,就是使得投掷骰子时,连续 掷出数字 i 的次数不能超过 rollMax[i](i 从 1 开始 ...

  8. LeetCode 1155. 掷骰子的N种方法(DP)

    1. 题目 这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, -, f. 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和. 如果需要掷出的总点数为 target,请你 ...

  9. LeetCode 1139. 最大的以 1 为边界的正方形(DP)

    1. 题目 给你一个由若干 0 和 1 组成的二维网格 grid,请你找出边界全部由 1 组成的最大 正方形 子网格,并返回该子网格中的元素数量.如果不存在,则返回 0. 示例 1: 输入:grid ...

  10. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

最新文章

  1. 阿里机器学习算法面经(已offer)
  2. Java项目打包部署war文件
  3. java 1kb_[代码全屏查看]-java输入输出流及文件操作
  4. vue的父子组建之间的通信(-),基于props和$emit之间的传递
  5. java 接口 签名机制_java – 当接口A在其方法签名中定义接口B时
  6. Python常用第三方库大盘点
  7. PRML-系列一之1.5.5~1.5.6
  8. Deep Learning for 3D Recognition
  9. 使用GDAL构造OpenCV的图像格式
  10. html点击发送qq邮箱_qq邮箱怎么发送文件夹
  11. C语言 16进制转float
  12. koa2 mysql sequelize_[转]使用nodejs-koa2-mysql-sequelize-jwt 实现项目api接口
  13. 使用晨曦记账本,分析某个时间段每个账户收支结余
  14. coap 返回版本信息_CoAP协议学习笔记
  15. 02尚硅谷书城案例-用户的注册
  16. 本地代码上传到gitlab
  17. 通过数据分析,了解外国人眼里的真实李子柒
  18. IT业界新闻资讯网站推荐
  19. 【华为交换机配置命令大全】
  20. 初二生态系统思维导图_初中七、八年级生物思维导图大全21张.pdf

热门文章

  1. OSError: [WinError 126] 找不到指定的模块。【专治疑难杂症】
  2. java 9消失_java9增强的自动关闭资源
  3. 米线店结账程序 装饰着模式_真实数据:外卖销售9999+ 长沙米线万单店 它究竟是怎么做到的?...
  4. Mysql 全局锁入门
  5. SparkStreaming transform算子入门案例
  6. HTTP协议请求中返回的各个状态码对应的状态信息
  7. JavaScript 是如何工作的:WebRTC和对等网络的机制!
  8. 【Java并发编程】—–“J.U.C”:ArrayBlockingQueue
  9. 专家:苹果有能力打造Mac芯片但不会去做
  10. android:layout_height、android:layout_width、android:height、android:width的关系与区别