点击打开链接

题意:

给你一个括号序列,让你找到最长的连续的合法括号序列

然后让你输出这个括号序列的长度是多少

这么长的括号序列一共有多少个

思路:

看到括号匹配,就用stack来弄就好了

然后我们dp一下,表示以这个字符结尾的序列的长度是多少

dp[i] += dp[k.top()-1]; 从当前合法序列的最左边'('的左边的位置转移,如果是'(',dp[k.top()-1]=0,否则 dp[k.top()-1]就是上一个合法序列的长度,比如:(())()就要加上4,当然也可能是0,比如:(()))()

正确题解(qscqesze,xiper):这是一道栈+dp的综合运用的题目。如果我们遇到(,那么我们就把这个位置放进栈里面。如果遇到)的话,就pop掉栈顶,且栈顶就是这个)匹配的(位置,如果我们用l[i]来表示与i匹配的左括号位置的话。
那么我们令dp[i]表示以i结尾的括号序列的最长长度的方程为:dp[i]=dp[l[i]-1]+(i-l[i]+1)。
最后在所有的dp里面取个max就好了。来自:http://www.cnblogs.com/qscqesze/p/6418555.html

代码:

 1 //http://codeforces.com/problemset/problem/5/C
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 typedef long long ll;
 5 const int maxn = 1e6+10;
 6 const int INF = 0x3f3f3f3f;
 7 const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
 8 inline ll read(){
 9     ll x=0,f=1;char ch=getchar();
10     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
11     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
12     return x*f;
13 }
14 //
15
16 stack<int> k;
17 string s;
18 ll dp[maxn];
19
20 int main(){
21     cin >> s;
22     for(int i=0; i<s.size(); i++){
23         if(s[i] == '(')
24             k.push(i);
25         else{
26             if(!k.empty()){
27                 dp[i] = i-k.top()+1;
28                 if(k.top() > 0)
29                     dp[i] += dp[k.top()-1]; // 从当前合法序列的最左边'('的左边的位置转移
30                 k.pop();
31             }
32         }
33     }
34     // for(int i=0; i<s.size(); i++)
35     //     cout << dp[i] << " ";
36     // cout << endl;
37
38     int ans1 = 0, ans2;
39     for(int i=0; i<s.size(); i++){
40         if(dp[i] > ans1){
41             ans1 = dp[i];
42             ans2 = 1;
43         }else if(dp[i]==ans1){
44             ans2 ++;
45         }
46     }
47
48     if(ans1 == 0)
49         cout << "0 1\n";
50     else
51         cout << ans1 << " " << ans2 << endl;
52
53     return 0;
54 }

转载于:https://www.cnblogs.com/yxg123123/p/6827719.html

Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 括号序列 dp+栈相关推荐

  1. Codeforces Beta Round #5 C. Longest Regular Bracket Sequence 栈/dp

    C. Longest Regular Bracket Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.c ...

  2. 【Codeforces】CF 5 C Longest Regular Bracket Sequence(dp)

    题目 传送门:QWQ 分析 洛谷题解里有一位大佬讲的很好. 就是先用栈预处理出可以匹配的左右括号在数组中设为1 其他为0 最后求一下最长连续1的数量. 代码 1 #include <bits/s ...

  3. 02.08 Longest Regular Bracket Sequence

    最长的常规支架序列|断续器 (jxnu.edu.cn)https://acs.jxnu.edu.cn/problem/CF5C 描述: This is yet another problem deal ...

  4. Codeforces Beta Round #9 (Div. 2 Only) D. How many trees? dp

    D. How many trees? 题目连接: http://www.codeforces.com/contest/9/problem/D Description In one very old t ...

  5. Codeforces Beta Round #4 (Div. 2 Only) B. Before an Exam dp

    B. Before an Exam 题目连接: http://www.codeforces.com/contest/4/problem/B Description Tomorrow Peter has ...

  6. Educational Codeforces Round 4 C. Replace To Make Regular Bracket Sequence 栈

    C. Replace To Make Regular Bracket Sequence 题目连接: http://www.codeforces.com/contest/612/problem/C De ...

  7. codeforces beta round 1

    codeforces beta round 1 A Theatre Square in the capital city of Berland has a rectangular shape with ...

  8. Codeforces Beta Round #17 D. Notepad (数论 + 广义欧拉定理降幂)

    Codeforces Beta Round #17 题目链接:点击我打开题目链接 大概题意: 给你 \(b\),\(n\),\(c\). 让你求:\((b)^{n-1}*(b-1)\%c\). \(2 ...

  9. Codeforces Beta Round #5 B. Center Alignment 模拟题

    B. Center Alignment 题目连接: http://www.codeforces.com/contest/5/problem/B Description Almost every tex ...

最新文章

  1. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传
  2. 交互两个数(不引入第三个变量)
  3. 10 个省时间的 PyCharm 技巧,提升工作效率,杠杠滴!
  4. 如何开始SLAM学习?
  5. linux 线程库在哪里,linux线程库
  6. 微信企业号 JS-SDK:上传图片
  7. JAVA中文字符串编码--GBK转UTF-8
  8. BZOJ5212 ZJOI2018历史(LCT)
  9. 查找出现次数超过一半的数
  10. AjaxControlToolkit AjaxFileUpload 为英文的解决办法
  11. msp430项目编程14
  12. ros云服务器_减少运维工作量,如何通过 ROS 轻松实现资源编排新方式
  13. WLAN中直接转发和隧道转发流程与封装
  14. CSRF跨站点伪造请求攻击——脱库及密码修改
  15. 音乐播放器之QQ音乐最新api,亲测可用
  16. Shell 获取服务器IP地址
  17. 在unity3D中添加字体
  18. 视频浓缩中的轨迹组合技术
  19. python+nodejs+php+springboot+vue 社区小区报修 -社区信息管理
  20. Error: Cannot find module ‘process-nextick-args‘,error:0308010C:digital envelope routines::unsupport

热门文章

  1. 昨天和一位成功的创业者聊天,他说了一番话,有价值,与大家分享
  2. 那些真正有用的经验,都是和高手过招换来的
  3. 一个人成就的高低,努力程度只是标配
  4. 经销商生意平台化是趋势
  5. 如何给namedtuple添加docstring
  6. JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别
  7. Visual Studio Code(VS Code)入门
  8. 如何使用SQL Server链接服务器查询Excel数据
  9. react sql格式化_为SQL Server数据库损坏做准备; 初步React与分析
  10. 如何使用SIOS DataKeeper在AWS EC2中配置较少SANSQL Server群集