题意:给你一些括号,问匹配规则成立的括号的个数。

思路:这题lrj的黑书上有,不过他求的是添加最少的括号数,是的这些括号的匹配全部成立。

我想了下,其实这两个问题是一样的,我们可以先求出括号要匹配的最少数量,那么设原来括号的数量为l , 添加了l' 。

那么其实原来括号匹配成功的括号数就是((l + l') / 2 - l') * 2。

#define N 105
char a[N] ;
int dp[N][N] ;
int f[N][N] ;
int check(int i ,int j) {
if(a[i] == '[' && a[j] == ']')return 1 ;
if(a[i] == '(' && a[j] == ')')return 1 ;
return 0 ;
}
void init() {
mem(dp ,0) ;
mem(f ,0) ;
}
int main() {
while(cin >> a) {
if(strcmp(a , "end") == 0)break ;
init() ;
int l = strlen(a) ;
for (int i = 0 ; i < l ; i ++ ) {
dp[i][i] = 1 ;
dp[i + 1][i] = 0 ;
}
for (int i = 1 ; i <= l ; i ++ ) {
for (int j = 0 ; j + i - 1 < l ; j ++ ) {
int s = j ;
int e = j + i - 1 ;
dp[s][e] = 0 ;
if(check(s ,e))dp[s][e] = min(dp[s][e] , dp[s + 1][e - 1]) ;
if(a[s] == '[' || a[s] == '(')dp[s][e] = min(dp[s][e] , dp[s + 1][e] + 1) ;
if(a[e] == ']' || a[e] == ')')dp[s][e] = min(dp[s][e] , dp[s][e - 1] + 1) ;
for (int k = s ; k < e ; k ++ ){
dp[s][e] = min(dp[s][e] , dp[s][k] + dp[k + 1][e]) ;
}
}
}
cout << ((l + dp[0][l - 1]) / 2 - dp[0][l - 1]) * 2 << endl;
}
return 0 ;
}

POJ 2955 括号匹配,区间DP的更多相关文章

  1. poj 2955 括号匹配 区间dp

    Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6033   Accepted: 3220 Descript ...

  2. poj 2955 Brackets 括号匹配 区间dp

    题意:最多有多少括号匹配 思路:区间dp,模板dp,区间合并. 对于a[j]来说: 刚開始的时候,转移方程为dp[i][j]=max(dp[i][j-1],dp[i][k-1]+dp[k][j-1]+ ...

  3. poj2955括号匹配 区间DP

    Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5424   Accepted: 2909 Descript ...

  4. 括号匹配 区间DP (经典)

    描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来 ...

  5. POJ - 2955 Brackets (区间DP)

    题目: 给出一个有括号的字符串,问这个字符串中能匹配的最长的子串的长度. 思路: 区间DP,首先枚举区间长度,然后在每一个长度中通过枚举这个区间的分割点来更新这个区间的最优解.还是做的少. 代码: / ...

  6. POJ 2955 Brackets(区间DP)题解

    题意:问最多有几个括号匹配 思路:用dp[i][j]表示i到j最多匹配,若i和j构成匹配,那么dp[i][j] = dp[i + 1][j - 1] + 2,剩下情况dp[i][j] = max(dp ...

  7. Poj 2955 brackets(区间dp)

    Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7795   Accepted: 4136 Descript ...

  8. POJ 2955 Brackets (区间DP,常规)

    题意: 给出一个字符串,其中仅仅含 “ ( ) [ ] ” 这4钟符号,问最长的合法符号序列有多长?(必须合法的配对,不能混搭) 思路: 区间DP的常规问题吧,还是枚举区间[i->j]再枚举其中 ...

  9. poj 2955 Brackets 【 区间dp 】

    话说这题自己折腾好久还是没有推出转移的公式来啊------------------ 只想出了dp[i][j]表示i到j的最大括号匹配的数目--ค(TㅅT)------------------- 后来搜 ...

随机推荐

  1. SQL Cursor(游标)

    1.游标在数据表没有id(identity(1,1))时好用,但是游标会吃更多的内存,减少可用的并发,占用宽带,锁定资源,当然还有更多的代码量 2.如果能不用游标,尽量不要使用游标,用完用完之后一定要 ...

  2. JS选择checkbox

    <script> window.onload = function () { //获取checkbox var ids1 = document.getElementsByName('Vot ...

  3. 用javascript操作xml(二)JavaScript 将XML转换成字符串(xml to string)

    function xmlToString(xmlData) { var xmlString; //IE if (window.ActiveXObject){ xmlString = xmlData.x ...

  4. c# datagridview导出到excel【转载】

    c# datagridview导出到excel[转载] http://hi.baidu.com/weizier/blog/item/8212caea1123b4d6d439c9fe.html 本作者使 ...

  5. MOS管应用之放反接电路

    一.典型电路 1.电路1 说明: GND-IN 为电源接口的负极 GND 为内部电路的公共地 原理分析 正向接: VCC-IN通过R1.R2.MOS体二极管,最后回到GND-IN;然后GS电压升高,紧 ...

  6. android studio中文乱码的解决方法【转】

    一. 在android的源文件中的乱码问题 Android Studio安装后发现所有的中文,不管是界面上的还是输出的log中的中文都变成小框框,具体的解决方法如下, 可以肯定是字体的问题 解决:菜单 ...

  7. jquery经验1

    1.Javascript刷新页面的几种方法: location.reload()// 真刷新 location=location location.assign(location) document. ...

  8. CSS中IE8和chrom像素百分比计算差异

    IE8中和chrome在计算像素百分比上,IE8舍一位取元素像素大小,chrome则使用四舍五入取元素像素大小: 比如:<body><div stype=“width:30%”> ...

  9. Js处理json数据

    js中处理由ajax调用返回的json数据问题,可以通过使用JSON.parse方法将json字符串转化成javascript 对象.通过对象访问属性值. JSON.parse 只限于高版本的浏览器. ...

  10. using namespace std

    using namespace std std 是一个命名空间..不同的命名空间可以有相同的类名被定义 ..using namespace std;就是指明下面的程序使用std,如果不用这句指明的话就 ...