POJ 2955 括号匹配,区间DP
题意:给你一些括号,问匹配规则成立的括号的个数。
思路:这题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的更多相关文章
- poj 2955 括号匹配 区间dp
Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6033 Accepted: 3220 Descript ...
- poj 2955 Brackets 括号匹配 区间dp
题意:最多有多少括号匹配 思路:区间dp,模板dp,区间合并. 对于a[j]来说: 刚開始的时候,转移方程为dp[i][j]=max(dp[i][j-1],dp[i][k-1]+dp[k][j-1]+ ...
- poj2955括号匹配 区间DP
Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 5424 Accepted: 2909 Descript ...
- 括号匹配 区间DP (经典)
描述给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来 ...
- POJ - 2955 Brackets (区间DP)
题目: 给出一个有括号的字符串,问这个字符串中能匹配的最长的子串的长度. 思路: 区间DP,首先枚举区间长度,然后在每一个长度中通过枚举这个区间的分割点来更新这个区间的最优解.还是做的少. 代码: / ...
- 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 ...
- Poj 2955 brackets(区间dp)
Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7795 Accepted: 4136 Descript ...
- POJ 2955 Brackets (区间DP,常规)
题意: 给出一个字符串,其中仅仅含 “ ( ) [ ] ” 这4钟符号,问最长的合法符号序列有多长?(必须合法的配对,不能混搭) 思路: 区间DP的常规问题吧,还是枚举区间[i->j]再枚举其中 ...
- poj 2955 Brackets 【 区间dp 】
话说这题自己折腾好久还是没有推出转移的公式来啊------------------ 只想出了dp[i][j]表示i到j的最大括号匹配的数目--ค(TㅅT)------------------- 后来搜 ...
随机推荐
- 在 lamp(centos)下配置二级 域名 、虚拟主机
1.你得拥有一个泛域名解析的顶级域名,有一个独立的IP: 2.解析二级域名,如在万网中心里,记录类型为A, 主机记录即为要配的二级域名(如:增加两个:bbs.mydomain.com 和 www.my ...
- gentoo下的wpa_supplicant无线网配置
在linux使用wpa_supplicant获得无线网的最痛苦的是莫过于去配置wpa_supplicant.conf文件了(当然对于linux老手这不算什么), 但是可以用一种简便的方法直接输入命令行 ...
- python【第十七篇】jQuery
1.jQuery是什么? jQuery是一个 JavaScript/Dom/Bom 库. jQuery 极大地简化了 JavaScript 编程. jQuery 很容易学习. 2.jQuery对象与D ...
- GitHub使用教程for Eclipse
1.下载egit插件http://www.eclipse.org/egit/ http://www.eclipse.org/egit/download/ Installing the Latest R ...
- Leetcode 解题 Longest Substring without repeating charcater python
原题: Given a string, find the length of the longest substring without repeating character For example ...
- http://www.w3cplus.com/animation/create-animated-text-fills.html
关于svg的资料: http://www.w3cplus.com/animation/create-animated-text-fills.html asp.net中jquery的ajax调用cs文件 ...
- IEEE会议排名(转载)
不知道谁整理的,我就下了个word.所以就标注不了,引用的哪的了. Rank 1: SIGCOMM: ACM Conf on Comm Architectures, Protocols & A ...
- 形形色色Node工程Angular2
最近项目要用的 一些无关紧要的文件夹, demo是一些示例, dist是webpack打包后发布的代码,server是用node启动服务,typings和tsconfig是一些ts配置. npm in ...
- HDU 5937 Equation 【DFS+剪枝】 (2016年中国大学生程序设计竞赛(杭州))
Equation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- DevExpress控件学习总结 z
1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们 ...