题意:

    有n个由左右括号组成的字符串,选择其中若干字符串,使得组成的括号序列合法且长度最长。n <= 1000,n个字符串的长度和 <= 10000。

  分析:

    其实我一开始做这一题的时候,看错了字符串长度和,以为每个字符串的长度都是10000,。

    首先我们具体分析每一个字符串,可以发现去掉合法的字符串之后,剩下的只有一堆右括号加上一堆左括号,也就是说整理之后,每个字符串就只剩下了两个参数,分别是左、右括号的个数。

    这个东西看起来像是一个背包的东西,由于要求组成的括号序列合法,即左右括号数量相等。那么是不是可以直接做差来一个背包呢?我们会发现,是不可以的。因为你并不知道会不会出现逆序括号合法化的情况,即")))((("视为合法化。

    这时候,就需要分类dp。我们把左括号数大于右括号数的括号序列统计出来。设F1[i]表示左括号数-右括号数 = i时组成的括号序列的最大长度。

    设当前做到第j个括号序列,设它的左括号数为x[j]、右括号数为y[j]。则转移方程:F1[i] = max{F1[i-(x[j]-y[j])]+len[j]},且必须满足y[j] <= i-(x[j]-y[j])(因为你不能减到负的嘛,如果是负的就要转到第二种情况去讨论了)。由于必须满足如上条件,且右括号越小,转移的可行性就越高,因此,我们需要把统计出的括号序列按右括号的大小从小到大排序,因为这样排序才能使转移可行(前提有了左括号数都是大于右括号数的)。

    如此我们求得了F1,我们再把右括号数大于左括号数的括号序列统计出来,再定义F2[i]为右括号数-左括号数 = i时组成括号序列的最大长度。

    那么ans = max{F1[i]+F2[i]};

    当然,是不会出现方案重叠的情况,因为做DP的时候已经分类了。

某DP题目1的更多相关文章

  1. DP题目列表/弟屁专题

    声明: 1.这份列表不是我原创的,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 10 ...

  2. dp题目列表

    此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 11 ...

  3. dp题目

    从别的地方看来,最近一直在啃DP,有个目标,更有动力了. 1.Robberies 连接 :http://acm.hdu.edu.cn/showproblem.php?pid=2955      背包; ...

  4. 插头DP题目泛做(为了对应WYD的课件)

    题目1:BZOJ 1814 URAL 1519 Formula 1 题目大意:给定一个N*M的棋盘,上面有障碍格子.求一个经过所有非障碍格子形成的回路的数量. 插头DP入门题.记录连通分量. #inc ...

  5. 很好的一个dp题目 Codeforces Round #326 (Div. 2) D dp

    http://codeforces.com/contest/588/problem/D 感觉吧,这道题让我做,我应该是不会做的... 题目大意:给出n,L,K.表示数组的长度为n,数组b的长度为L,定 ...

  6. 两道很好的dp题目【4.29考试】

    A 问题描述: 对于一个排列,考虑相邻的两个元素,如果后面一个比前面一个大,表示这个位置是上升的,用I表示,反之这个位置是下降的,用D表示.如排列3,1,2,7,4,6,5可以表示为DIIDID. 现 ...

  7. 题目1453:Greedy Tino(dp题目)

    题目链接:http://ac.jobdu.com/problem.php?pid=1453 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  8. 题目1452:搬寝室(dp题目)

    题目链接:http://ac.jobdu.com/problem.php?pid=1452 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  9. 题目1042:Coincidence(最长公共子序列 dp题目)

    题目链接:http://ac.jobdu.com/problem.php?pid=1042 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  10. 概率dp+期望dp 题目列表(一)

    表示对概率和期望还不是很清楚定义. 目前暂时只知道概率正推,期望逆推,然后概率*某个数值=期望. 为什么期望是逆推的,例如你求到某一个点的概率我们可以求得,然后我们只要运用dp从1~n每次都加下去就好 ...

随机推荐

  1. 大美西安writeup

    http://202.112.51.184:10080/ admin/admin 弱口令登入 发现注入 但是这个注入实在是不知道怎么利用.很蛋疼.后来get了一个姿势. 先-1让前面的不被下载然后后面 ...

  2. StringBuilder基本用法

    //StringBuilder用法 public class StringBuilderTest { public static void main(String[] args) { StringBu ...

  3. Linux软件管理器(如何使用软件管理器来管理软件)2---安装及管理Linux应用程序

    安装及管理Linux应用程序 Linux应用程序的组成1.普通的可执行程序文件,一般保存在/usr/bin目录中,普通用户即可执行.2.服务器程序.管理程序文件,一般保存在/usr/sbin目录中,需 ...

  4. (三)Spring 之AOP 详解

    第一节:AOP 简介 AOP 简介:百度百科: 面向切面编程(也叫面向方面编程):Aspect Oriented Programming(AOP),是软件开发中的一个热点,也是Spring框架中的一个 ...

  5. hdu 5918(强行水过去..正解KMP)

    Sequence I Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  6. loadrunner 三种post函数区别

    web_custom_request方法可以发送POST和GET类型的请求 web_submit_data只能发送POST类型的请求,提供了所有的数据,不管Cache存在不存在Web_submit_d ...

  7. jquery on方法(事件委托)

    jquery绑定事件处理函数的方法有好几个,比如:bind(),on(),delegate(),live(). 其中delegate和live都是用on实现的,效果也类似,live好像在1.7版本中已 ...

  8. live555例子程序编译连接时发现函数未定义问题

    1 调整连接库的顺序. 2 更新头文件与所用的库一致

  9. 双缓冲解决控制台应用程序输出“闪屏”(C/C++,Windows)

    使用 C 语言编写游戏的小伙伴们想必起初都要遇到这样的问题,在不断清屏输出数据的过程中,控制台中的输出内容会不断地闪屏.出现这个问题的原因是程序对数据处理花掉的时间影响到了数据显示,或许你可以使用局部 ...

  10. 【WPF】淡入淡出切换页面

    <NavigationWindow x:Class="WpfApplication1.Window1" xmlns="http://schemas.microsof ...