洛谷 题解 UVA1626 【括号序列 Brackets sequence】
看还没有人发记搜的题解,赶紧来水发一篇
我们定义dp[i][j]
为区间i~j
内最少添加几个括号才能把这个串变成正规括号序列。
考虑四种情况
i>j
不存在这种子串,返回0
i==j
子串长度为1
无论是"[","]","(",")"
都是要消耗1的,返回1
s=(s')或s=[s']
那么返回的是DP(i+1,j-1)其他情况,枚举断点,详见代码
至于输出嘛.....不会,看紫书的,输出代码的解释看看楼上吧,这里就不详细解释了
代码:
#include<bits/stdc++.h>
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;i++)//枚举i~j的断点
{
dp[l][r]=min(dp[l][r],DP(l,i)+DP(i+1,r));//④
}
return dp[l][r];
}
inline void print(int l,int r)//输出
{
if(l>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<<s[l-1];
print(l+1,r-1);
cout<<s[r-1];
}
else
{
for(int i=l;i<r;i++)
{
if(dp[l][r]==dp[l][i]+dp[i+1][r])
{
print(l,i);
print(i+1,r);
return;
}
}
}
}
int main()
{
scanf("%d",&T);
getchar();
while(T--)
{
memset(dp,0x3f,sizeof(dp));
getline(cin,s);
getline(cin,s);
//这里要小心,输入的可能是空串!!!!!!!!坑了我很久了
int n=s.size();
//cout<<n<<" "<<s<<endl;
if(!n)
{
cout<<endl<<endl;
continue;
}
DP(1,n);
//cout<<DP(1,n)<<endl;
print(1,n);
cout<<endl;
if(T)cout<<endl;//输出格式也要注意!!
}
return 0;
}
洛谷 题解 UVA1626 【括号序列 Brackets sequence】的更多相关文章
- UVA1626 括号序列 Brackets sequence(区间dp)
题目传送门(洛谷) 题目传送门(UVA) 解题思路 很显然是一个区间dp,当然记忆化搜索完全可以AC,这里说一下区间dp. 区间dp的重要特征就是需要枚举中间节点k 看一看这道题,用f[i][j] ...
- 洛谷 2023 [AHOI2009]维护序列
洛谷 2023 [AHOI2009]维护序列 洛谷原题传送门 这个题也是一道经典的线段树模版(其实洛谷的模版二改一下输入顺序就能AC),其中包括区间乘法修改.区间加法修改.区间查询三个操作. 线段树的 ...
- 洛谷P2023 [AHOI2009]维护序列(线段树区间更新,区间查询)
洛谷P2023 [AHOI2009]维护序列 区间修改 当我们要修改一个区间时,要保证 \(ax+b\) 的形式,即先乘后加的形式.当将区间乘以一个数 \(k\) 时,原来的区间和为 \(ax+b\) ...
- 洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP
洛谷 P4093 [HEOI2016/TJOI2016]序列 CDQ分治优化DP 题目描述 佳媛姐姐过生日的时候,她的小伙伴从某宝上买了一个有趣的玩具送给他. 玩具上有一个数列,数列中某些项的值可能会 ...
- 【题解】洛谷P2023 [AHOI2009] 维护序列(线段树)
洛谷P2023:https://www.luogu.org/problemnew/show/P2023 思路 需要2个Lazy-Tag 一个表示加的 一个表示乘的 需要先计算乘法 再计算加法 来自你谷 ...
- 洛谷 P3215 [HNOI2011]括号修复 / [JSOI2011]括号序列(fhq-treap)
题目链接 题意:有一个长度为 \(n\) 的括号序列,你需要支持以下操作: 将 \([l,r]\) 中所有括号变为 \(c\) 将 \([l,r]\) 区间翻转 将 \([l,r]\) 区间中左括号变 ...
- [洛谷P2023] [AHOI2009]维护序列
洛谷题目链接:[AHOI2009]维护序列 题目描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列 ...
- BZOJ4553/洛谷P4093 [HEOI2016/TJOI2016]序列 动态规划 分治
原文链接http://www.cnblogs.com/zhouzhendong/p/8672434.html 题目传送门 - BZOJ4553 题目传送门 - 洛谷P4093 题解 设$Li$表示第$ ...
- 【洛谷3321_BZOJ3992】[SDOI2015]序列统计(原根_多项式)
题目: 洛谷3321 分析: 一个转化思路比较神(典型?)的题-- 一个比较显然的\(O(n^3)\)暴力是用\(f[i][j]\)表示选了\(i\)个数,当前积在模\(m\)意义下为\(j\)的方案 ...
随机推荐
- HR#4 题解
既然考这么差就来写题啦OTZ T1 猜结论?猜nm! 一直到考试结束都没猜出来=.=我就好奇别人如何猜出来的 我们来说DP(from ZBK) 设\(dp[i][j]\)表示胜or负 那我们来看一下代 ...
- word文档如何选择全部图片粘贴
很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...
- 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 ...
- 在Android中使用OpenGL ES进行开发第(一)节:概念先行
一.前期基础是知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGL ES绘制 ...
- Break Standard Weight (ZOJ 3706)
Problem The balance was the first mass measuring instrument invented. In its traditional form, it co ...
- 深入理解D3D9
本文写的较为深入,故转载在此留以备案,呵呵~ 原文链接为:http://www.cnblogs.com/effulgent/archive/2009/02/10/1387438.html ------ ...
- k8s之yaml详解
k8s之yaml详解 apiVersion: v1 #指定api版本,此值必须在kubectl apiversion中 kind: Pod #指定创建资源的角色/类型 metadata: #资源的元数 ...
- fluent中统计颗粒信息【转载】
转载自:http://mp.weixin.qq.com/s?__biz=MjM5MDkyMjA1Nw==&mid=502657725&idx=1&sn=120703a69e56 ...
- tecplot 把散点绘成曲面图【转载】
转载自:http://blog.sina.com.cn/s/blog_a319f5ff0101q6s8.html 找了好久,终于自己研究出来,如何使用tecplot绘制曲面图了 第一步:数据的整理 如 ...
- SQL Server Management Studio 清除用户名和密码
SQL Server Management Studio 2018 delete the file C:\Users\%username%\AppData\Roaming\Microsoft\SQL ...