题目链接:http://poj.org/problem?id=2955

题目大意:给你一串字符串,求最大的括号匹配数。

解题思路:

设dp[i][j]是[i,j]的最大括号匹配对数。

则得到状态转移方程:

if(str[i]=='('&&str[j]==')'||(str[i]=='['&&str[j]==']')){
  dp[i][j]=dp[i+1][j-1]+1;
}
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]) ,(i<=k<j)

代码:

 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cctype>
 4 #include<cstring>
 5 #include<iostream>
 6 #include<algorithm>
 7 #include<vector>
 8 #include<queue>
 9 #include<set>
10 #include<map>
11 #include<stack>
12 #include<string>
13 #define lc(a) (a<<1)
14 #define rc(a) (a<<1|1)
15 #define MID(a,b) ((a+b)>>1)
16 #define fin(name)  freopen(name,"r",stdin)
17 #define fout(name) freopen(name,"w",stdout)
18 #define clr(arr,val) memset(arr,val,sizeof(arr))
19 #define _for(i,start,end) for(int i=start;i<=end;i++)
20 #define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
21 using namespace std;
22 typedef long long LL;
23 const int N=5e2+5;
24 const int INF=0x3f3f3f3f;
25 const double eps=1e-10;
26
27 int dp[N][N];
28 char str[N];
29
30 int main(){
31     while(~scanf("%s",str)&&strcmp(str,"end")){
32         int n=strlen(str);
33         memset(dp,0,sizeof(dp));
34         for(int len=1;len<n;len++){
35             for(int i=0;i+len<n;i++){
36                 int j=i+len;
37                 if(str[i]=='('&&str[j]==')'||(str[i]=='['&&str[j]==']')){
38                     dp[i][j]=dp[i+1][j-1]+1;
39                 }
40                 for(int k=i;k<j;k++){
41                     dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]);
42                 }
43             }
44         }
45         printf("%d\n",dp[0][n-1]*2);
46     }
47     return 0;
48 }

转载于:https://www.cnblogs.com/fu3638/p/8843534.html

POJ 2955 Brackets(括号匹配一)相关推荐

  1. POJ 2955 Brackets (区间DP)

    题目链接:http://poj.org/problem?id=2955 Brackets Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  2. 【DP】 POJ 2955 Brackets 区间DP

    从小区间到大大区间 并计算 当前能否 括号匹配 #include <cstdio> #include <cstring> #include <cstdlib> #i ...

  3. POJ - 2955 Brackets (区间DP)

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

  4. (区间dp 或 记忆化搜素 )Brackets -- POJ -- 2955

    http://poj.org/problem?id=2955 Description We give the following inductive definition of a "reg ...

  5. 动态规划训练9 [Brackets POJ - 2955 ]

    Brackets POJ - 2955 再明显不过的区间DP的题目了,要求求出给出符号式中最大匹配的括号数. 考虑区间[l,r],如果str[l]与str[r]匹配了,那么转移方程为dp[l][r] ...

  6. POJ 2955 (区间DP)

    题目链接: http://poj.org/problem?id=2955 题目大意:括号匹配.对称的括号匹配数量+2.问最大匹配数. 解题思路: 看起来像个区间问题. DP边界:无.区间间隔为0时,默 ...

  7. [NYOJ 15] 括号匹配(二)

    括号匹配(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述给你一个字符串,里面只包含"(",")","[" ...

  8. POJ 1141 Brackets Sequence(动态规划)

    题目大意 给你一个括号串(包括'(',')','[',']'),长度不超过 100,问你怎么添加最少的括号,使得这个括号串是合法的,输出添加括号后的合法括号串 做法分析 以长度划分阶段,定义状态:f[ ...

  9. POJ1177矩形面积并(矩形切割+括号匹配)

    题目:http://poj.org/problem?id=1177 分析:(括号匹配)首先把矩形的上边界作为"左括号"边,下边界作为"右括号"边,然后上下排序. ...

最新文章

  1. linux包之procps之sysctl命令
  2. Ghost 系统的过程
  3. Javascript乱弹设计模式系列(1) - 观察者模式(Observer)
  4. java对象模型 指令_深入理解多线程(二)—— Java的对象模型
  5. python图像等比例压缩_python使用pil进行图像处理(等比例压缩、裁剪)实例代码
  6. android104 帧动画,补间动画,属性动画
  7. 计算机系给未来的自己写信,写信给未来的自己
  8. oracle数据库集群采用的是形式,铁道部采用Oracle集群数据库进行TMIS系统“三级建库”...
  9. 网站重构之精简你的代码
  10. redis_学习_02_redis 可视化工具 Redis Desktop Manager
  11. 正射影像、倾斜摄影测量相关软件汇总
  12. 在线中文姓名生成工具推荐
  13. AD10封装库转到PADS封装库里
  14. 手提电脑亮度不能调节,亮度调节按钮变灰,找不到调节亮度按钮
  15. [单调栈 扫描线] BZOJ 4826 [Hnoi2017]影魔
  16. 如何通过idea打包项目到docker
  17. 在openEuler 21.9安装自带的容器软件Docker、podman、skopeo
  18. ldap + sentry架构的相关结论的验证
  19. 万能数据库查询分析器使用技巧之(十三)
  20. linux joe编辑器,Linux joe命令

热门文章

  1. ospf特殊区域,默认路由,汇总
  2. 对付网络盗贼的三板斧
  3. Makefile文件的使用
  4. 怎么在js中取java变量的值
  5. java.lang.OutOfMemoryError及解决方案
  6. 基于面向服务体系架构(SOA)和面向资源体系架构(ROA)的业务组件模型
  7. 口语学习Day8:今天聊聊微信有关的英语总结!
  8. Shell变量命名规则
  9. linux系统的交换分区怎么分配?
  10. 常考数据结构与算法:平衡二叉树