博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷 题解 UVA1626 【括号序列 Brackets sequence】
阅读量:7156 次
发布时间:2019-06-29

本文共 912 字,大约阅读时间需要 3 分钟。

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

我们定义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. 其他情况,枚举断点,详见代码

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

代码:

#include
using namespace std;const int INF=0x3f3f3f3f;int T,n;string s;int dp[110][110];//记忆inline int DP(int l,int r)//记搜{ if(l==r)return dp[l][r]=1;//② if(l>r)return dp[l][r]=0;//① if(dp[l][r]!=INF)return dp[l][r];//记忆化 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));//③ for(int i=l;i
r)return; if(l==r) { if(s[l-1]=='('||s[l-1]==')') cout<<"()"; if(s[l-1]=='['||s[l-1]==']') cout<<"[]"; return; } if(dp[l][r]==dp[l+1][r-1]&&((s[l-1]=='('&&s[r-1]==')')||(s[l-1]=='['&&s[r-1]==']'))) { cout<

转载于:https://www.cnblogs.com/hulean/p/10902633.html

你可能感兴趣的文章
Spring框架基本概念之POJO,EJB,DI,AOP,IOO,JCA
查看>>
数据库_SQL语句
查看>>
RecyclerView 下拉刷新和加载更多
查看>>
Java线程池相关类-Executor框架
查看>>
插入排序Java版
查看>>
C#分页插件 Webdiyer
查看>>
如何减少回流,重绘
查看>>
逗号分隔的字符串与List互转
查看>>
python基础===理解Class的一道题
查看>>
****IQ Test
查看>>
搜索专题:Balloons
查看>>
TensorFlow从入门到理解(三):你的第一个卷积神经网络(CNN)
查看>>
《转》Web Service实践之——开始XFire
查看>>
android使用微软雅黑字体
查看>>
Luogu4887 第十四分块(前体)
查看>>
第六次Java作业 ----IO流
查看>>
iOS之蓝牙开发—CoreBluetooth详解
查看>>
C# 一款属于自己的音乐播放器
查看>>
TNS-12537: TNS:connection closed TNS-12560: TNS:protocol adapter error TNS-00507: Connection clos
查看>>
保研夏令营证书扫描工具推荐
查看>>