话说这题自己折腾好久还是没有推出转移的公式来啊------------------

只想出了dp[i][j]表示i到j的最大括号匹配的数目--ค(TㅅT)-------------------

后来搜题解看到有两种有一点点不同的做法

dp[i][j] = max(dp[i+1][j-1] + ok(i,j), dp[i][k] + dp[k+1][j])

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int d[][];
char s[];
int n; int ok(int x,int y){
if(s[x] == '(' && s[y] == ')') return ;
if(s[x] == '[' && s[y] == ']') return ;
return ;
} int dp(int x,int y){
int& ans = d[x][y];
if(ans >= ) return ans;
if(x > y) return ; ans = dp(x+,y-) + ok(x,y);
for(int k = x;k < y;k++){
ans = max(ans,dp(x,k) + dp(k+,y));
// printf("ans = %d\n",ans);
}
return ans;
} int main(){
while(scanf("%s",s+) != EOF){
if(s[] == 'e') break;
n = strlen(s+); memset(d,-,sizeof(d)); int res = dp(,n); // for(int i = 1;i <= n;i++)
// for(int j = 1;j <= n;j++)
// printf("d[%d][%d] = %d\n",i,j,d[i][j]); printf("%d\n",*res);
}
return ;
}

另一种是考虑i的作用,感觉和换衣服那题有点点像

如果i只被第i个位置用,不考虑后来和它配对的,dp[i][j] = dp[i+1][j]

考虑i和后面的配对,dp[i][j] = max(dp[i][j],dp[i+1][k-1] + dp[k+1][j] + ok(i,k) );

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int d[][];
char s[];
int n; int ok(int x,int y){
if(s[x] == '(' && s[y] == ')') return ;
if(s[x] == '[' && s[y] == ']') return ;
return ;
} int dp(int x,int y){
int& ans = d[x][y];
if(ans >= ) return ans;
if(x >= y) {
ans = ;
return ans;
}
if(y == x+) {
ans = ok(x,y);
return ans;
} ans = dp(x+,y);
for(int k = x;k <= y;k++){
if(ok(x,k)) ans = max(ans,dp(x+,k-) + dp(k+,y) + );
// printf("ans = %d\n",ans);
}
return ans;
} int main(){
while(scanf("%s",s+) != EOF){
if(s[] == 'e') break;
n = strlen(s+); memset(d,-,sizeof(d)); int res = dp(,n); //for(int i = 1;i <= n;i++)
//for(int j = 1;j <= n;j++)
// printf("d[%d][%d] = %d\n",i,j,d[i][j]); printf("%d\n",res);
}
return ;
}

poj 2955 Brackets 【 区间dp 】的更多相关文章

  1. HOJ 1936&POJ 2955 Brackets(区间DP)

    Brackets My Tags (Edit) Source : Stanford ACM Programming Contest 2004 Time limit : 1 sec Memory lim ...

  2. poj 2955 Brackets (区间dp基础题)

    We give the following inductive definition of a “regular brackets” sequence: the empty sequence is a ...

  3. poj 2955"Brackets"(区间DP)

    传送门 https://www.cnblogs.com/violet-acmer/p/9852294.html 题意: 给你一个只由 '(' , ')' , '[' , ']' 组成的字符串s[ ], ...

  4. poj 2955 Brackets (区间dp 括号匹配)

    Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...

  5. POJ 2955 Brackets 区间DP 入门

    dp[i][j]代表i->j区间内最多的合法括号数 if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']') dp[i][j] ...

  6. POJ 2955 Brackets(区间DP)

    题目链接 #include <iostream> #include <cstdio> #include <cstring> #include <vector& ...

  7. POJ 2955 Brackets 区间DP 最大括号匹配

    http://blog.csdn.net/libin56842/article/details/9673239 http://www.cnblogs.com/ACMan/archive/2012/08 ...

  8. POJ 2995 Brackets 区间DP

    POJ 2995 Brackets 区间DP 题意 大意:给你一个字符串,询问这个字符串满足要求的有多少,()和[]都是一个匹配.需要注意的是这里的匹配规则. 解题思路 区间DP,开始自己没想到是区间 ...

  9. A - Brackets POJ - 2955 (区间DP模板题)

    题目链接:https://cn.vjudge.net/contest/276243#problem/A 题目大意:给你一个字符串,让你求出字符串的最长匹配子串. 具体思路:三个for循环暴力,对于一个 ...

  10. POJ 2955 Brackets 区间合并

    输出一个串里面能匹配的括号数 状态转移方程: if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']')             dp ...

随机推荐

  1. 【剑指Offer】13、调整数组顺序使奇数位于偶数前面

      题目描述:   输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变.   解题思 ...

  2. POJ 3126 Prime Path (BFS + 素数筛)

    链接 : Here! 思路 : 素数表 + BFS, 对于每个数字来说, 有四个替换位置, 每个替换位置有10种方案(对于最高位只有9种), 因此直接用 BFS 搜索目标状态即可. 搜索的空间也不大. ...

  3. PHP循环输出二维数组的数据

    //下面是一个例子$g_id = isset($_GET['id'])?$_GET['id']:'1';//定义变量$g_id,使用三元运算符是为了避免出现waring $p_id = ($g_id& ...

  4. Git 基础教程 之 Bug分支和Stash

    在Git中,每个Bug都可以通过一个新的临时分支修复,修复后,合并分支,然后删除. ①    当接到一个Bug任务时,但dev上进行的工作还没有提交时: ②    git stash 把现场工作“储藏 ...

  5. 【2】数据采集 - urllib模块

    python2环境下关于urllib2的使用可以学习这篇文章.本文主要针对python3环境下使用urllib模块实现简单程序爬虫. 链接:https://www.jianshu.com/p/3183 ...

  6. Codeforces 947E Perpetual Subtraction (线性代数、矩阵对角化、DP)

    手动博客搬家: 本文发表于20181212 09:37:21, 原地址https://blog.csdn.net/suncongbo/article/details/84962727 呜啊怎么又是数学 ...

  7. 【hihocoder 1287】 数论一·Miller-Rabin质数测试

    [题目链接]:http://hihocoder.com/problemset/problem/1287 [题意] [题解] 取的底数必须是小于等于n-1的; 那12个数字能通过2^64以内的所有数字; ...

  8. Extensions for Spatial Data

    http://dev.mysql.com/worklog/task/?spm=5176.100239.blogcont4270.8.j3asa7&id=6609 前文: 这两天因为项目原因看了 ...

  9. HDU 1912

    坑,直接把公路看成X轴来做,然后,排序扫描一下,你懂的. #include <iostream> #include <algorithm> #include <cstdi ...

  10. Android动态部署五:怎样从插件apk中启动Service

    转载请注明出处:http://blog.csdn.net/ximsfei/article/details/51072332 github地址:https://github.com/ximsfei/Dy ...