看还没有人发记搜的题解,赶紧来水发一篇

我们定义dp[i][j]为区间i~j内最少添加几个括号才能把这个串变成正规括号序列。

考虑四种情况

  1. i>j不存在这种子串,返回0

  2. i==j子串长度为1无论是"[","]","(",")"都是要消耗1的,返回1

  3. s=(s')或s=[s']那么返回的是DP(i+1,j-1)

  4. 其他情况,枚举断点,详见代码

至于输出嘛.....不会,看紫书的,输出代码的解释看看楼上吧,这里就不详细解释了

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int INF=0x3f3f3f3f;
  4. int T,n;
  5. string s;
  6. int dp[110][110];//记忆
  7. inline int DP(int l,int r)//记搜
  8. {
  9. if(l==r)return dp[l][r]=1;//②
  10. if(l>r)return dp[l][r]=0;//①
  11. if(dp[l][r]!=INF)return dp[l][r];//记忆化
  12. if(s[l-1]=='('&&s[r-1]==')'||s[l-1]=='['&&s[r-1]==']')dp[l][r]=min(dp[l][r],DP(l+1,r-1));//③
  13. for(int i=l;i<r;i++)//枚举i~j的断点
  14. {
  15. dp[l][r]=min(dp[l][r],DP(l,i)+DP(i+1,r));//④
  16. }
  17. return dp[l][r];
  18. }
  19. inline void print(int l,int r)//输出
  20. {
  21. if(l>r)return;
  22. if(l==r)
  23. {
  24. if(s[l-1]=='('||s[l-1]==')')
  25. cout<<"()";
  26. if(s[l-1]=='['||s[l-1]==']')
  27. cout<<"[]";
  28. return;
  29. }
  30. if(dp[l][r]==dp[l+1][r-1]&&((s[l-1]=='('&&s[r-1]==')')||(s[l-1]=='['&&s[r-1]==']')))
  31. {
  32. cout<<s[l-1];
  33. print(l+1,r-1);
  34. cout<<s[r-1];
  35. }
  36. else
  37. {
  38. for(int i=l;i<r;i++)
  39. {
  40. if(dp[l][r]==dp[l][i]+dp[i+1][r])
  41. {
  42. print(l,i);
  43. print(i+1,r);
  44. return;
  45. }
  46. }
  47. }
  48. }
  49. int main()
  50. {
  51. scanf("%d",&T);
  52. getchar();
  53. while(T--)
  54. {
  55. memset(dp,0x3f,sizeof(dp));
  56. getline(cin,s);
  57. getline(cin,s);
  58. //这里要小心,输入的可能是空串!!!!!!!!坑了我很久了
  59. int n=s.size();
  60. //cout<<n<<" "<<s<<endl;
  61. if(!n)
  62. {
  63. cout<<endl<<endl;
  64. continue;
  65. }
  66. DP(1,n);
  67. //cout<<DP(1,n)<<endl;
  68. print(1,n);
  69. cout<<endl;
  70. if(T)cout<<endl;//输出格式也要注意!!
  71. }
  72. return 0;
  73. }

洛谷 题解 UVA1626 【括号序列 Brackets sequence】的更多相关文章

  1. UVA1626 括号序列 Brackets sequence(区间dp)

    题目传送门(洛谷)   题目传送门(UVA) 解题思路 很显然是一个区间dp,当然记忆化搜索完全可以AC,这里说一下区间dp. 区间dp的重要特征就是需要枚举中间节点k 看一看这道题,用f[i][j] ...

  2. 洛谷 2023 [AHOI2009]维护序列

    洛谷 2023 [AHOI2009]维护序列 洛谷原题传送门 这个题也是一道经典的线段树模版(其实洛谷的模版二改一下输入顺序就能AC),其中包括区间乘法修改.区间加法修改.区间查询三个操作. 线段树的 ...

  3. 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)

    洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...

  4. 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP

    洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...

  5. 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)

    洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ...

  6. 洛谷 P3215 [HNOI2011]括号修复 / [JSOI2011]括号序列(fhq-treap)

    题目链接 题意:有一个长度为 \(n\) 的括号序列,你需要支持以下操作: 将 \([l,r]\) 中所有括号变为 \(c\) 将 \([l,r]\) 区间翻转 将 \([l,r]\) 区间中左括号变 ...

  7. [洛谷P2023] [AHOI2009]维护序列

    洛谷题目链接:[AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列 ...

  8. BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治

    原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...

  9. 【洛谷3321_BZOJ3992】[SDOI2015]序列统计(原根_多项式)

    题目: 洛谷3321 分析: 一个转化思路比较神(典型?)的题-- 一个比较显然的\(O(n^3)\)暴力是用\(f[i][j]\)表示选了\(i\)个数,当前积在模\(m\)意义下为\(j\)的方案 ...

随机推荐

  1. HR#4 题解

    既然考这么差就来写题啦OTZ T1 猜结论?猜nm! 一直到考试结束都没猜出来=.=我就好奇别人如何猜出来的 我们来说DP(from ZBK) 设\(dp[i][j]\)表示胜or负 那我们来看一下代 ...

  2. word文档如何选择全部图片粘贴

    很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...

  3. The 10th Shandong Provincial Collegiate Programming Contest

    目录 Contest Info Solutions A. Calandar B. Flipping Game C. Wandering Robot D. Game on a Graph E. BaoB ...

  4. 在Android中使用OpenGL ES进行开发第(一)节:概念先行

    一.前期基础是知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGL ES绘制 ...

  5. Break Standard Weight (ZOJ 3706)

    Problem The balance was the first mass measuring instrument invented. In its traditional form, it co ...

  6. 深入理解D3D9

    本文写的较为深入,故转载在此留以备案,呵呵~ 原文链接为:http://www.cnblogs.com/effulgent/archive/2009/02/10/1387438.html ------ ...

  7. k8s之yaml详解

    k8s之yaml详解 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数 ...

  8. fluent中统计颗粒信息【转载】

    转载自:http://mp.weixin.qq.com/s?__biz=MjM5MDkyMjA1Nw==&mid=502657725&idx=1&sn=120703a69e56 ...

  9. tecplot 把散点绘成曲面图【转载】

    转载自:http://blog.sina.com.cn/s/blog_a319f5ff0101q6s8.html 找了好久,终于自己研究出来,如何使用tecplot绘制曲面图了 第一步:数据的整理 如 ...

  10. SQL Server Management Studio 清除用户名和密码

    SQL Server Management Studio 2018 delete the file C:\Users\%username%\AppData\Roaming\Microsoft\SQL  ...