题目大意:

给你一个只由'('、')'、'['、']'组成的字符串,问你这个字符串的子串能够匹配的最长长度是多少。

能够匹配的意思是这样的:

1.如果s是个空串,那么它是匹配的。

2.如果子串是(s)或者[s],那么它也是匹配的,其中s是匹配的

3.如果s是匹配的,s'也是匹配的,那么ss'也是匹配的

解题思路:

标准的区间DP

直接按照上面3个定义来考虑区间DP就好。

代码:

#include <map>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int maxn = 105;char str[maxn];
int dp[maxn][maxn];
map<char, char> mp;bool check(int l, int r) {if (mp[str[l]] == str[r]) return true;else return false;
}
int dfs(int l, int r) {if (l > r) return 0;if (l < 0 || r < 0) return 0;if (dp[l][r] != -1) return dp[l][r];if (l == r) return dp[l][r] = 0;for (int i = l; i < r; ++i)dp[l][r] = max(dp[l][r], dfs(l, i) + dfs(i + 1, r));if (check(l, r)) dp[l][r] = max(dp[l][r], dfs(l + 1, r - 1) + 2);else dp[l][r] = max(dp[l][r], dfs(l + 1, r - 1));//printf("dp[%d][%d] = %d\n", l, r, dp[l][r]);return dp[l][r];
}
int main() {mp['('] = ')'; mp['['] = ']'; mp[')'] = '#'; mp[']'] = '$';while (~scanf(" %s", str) && strcmp(str, "end") != 0) {memset(dp, -1, sizeof(dp));printf("%d\n", dfs(0, strlen(str) - 1));}return 0;
}

转载于:https://www.cnblogs.com/wiklvrain/p/8179358.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. POJ 2955 Brackets(括号匹配一)

    题目链接:http://poj.org/problem?id=2955 题目大意:给你一串字符串,求最大的括号匹配数. 解题思路: 设dp[i][j]是[i,j]的最大括号匹配对数. 则得到状态转移方 ...

  3. POJ - 2955 Brackets (区间DP)

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

  4. 【DP】 POJ 2955 Brackets 区间DP

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

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

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

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

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

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

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

  8. Brackets POJ - 2955 (区间DP+最大括号匹配子序列)

    传送门 题目:给一个长度n(<=100)的只包含'[',']','(',)'的字符串,求最长的完全匹配的子序列.输出长度 题解:区间dp,dp[i][j]表示i~j的最长匹配数,一支dp[i][ ...

  9. POJ 2955 (区间DP)

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

  10. POJ 2955 区间DP必看的括号匹配问题,经典例题

    Brackets Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14226 Accepted: 7476 Description ...

最新文章

  1. matlab 定义string_MATLAB开发自动驾驶第十课-创建用于加载自定义地面真值数据源的类...
  2. java mysql框架_盘点 Java 数据库访问框架——究竟哪个更适合你
  3. ugui unity 图片缩放循环_Unity基础系列(四)——构造分形(递归的实现细节)...
  4. antlr java_使用ANTLR和Java创建外部DSL
  5. 传智播客毕向东java基础全套视频教程_传智播客毕向东JAVA基础教程全套视频教程(324课)...
  6. spring源码解析专栏导航
  7. 谈谈架构师是何种生物
  8. 分享一个自己做的记账的小程序 - 智能记账,欢迎朋友们体验
  9. win10显示未插入扬声器或耳机的解决方案
  10. 济南市“十四五”数字泉城规划 附下载
  11. 【中文分词】最大熵马尔可夫模型MEMM
  12. 横向瀑布流android,waterfall
  13. 计算机科学湖北的大学排行,2015年湖北省大学最佳专业排行榜
  14. UEFI怎么用 UEFI安全启动设置添加方法步骤图解
  15. 项目日志20190707
  16. As I Please--PartⅠ
  17. 计算机控制键盘,键盘装置及其计算机控制系统的制作方法
  18. 欧姆龙程序PLC案例标准程序 使用欧姆龙CP1H写的脉冲伺服 步进控制程序案例
  19. java写猴子偷桃问题_猴子偷桃是什么意思
  20. 并联串联混合的电压和电流_并联型的有源滤波器能够有多少种用法?

热门文章

  1. 编写jQueryUI插件(widget)
  2. (已解决)ubuntu20.04 jar xvf XXX.zip报错-java.io.EOFException:Unexpected end of ZLIB input stream
  3. 查找手机型号云服务器,查找手机型号云服务器
  4. java培训分享:java软件开发可以用哪些软件?
  5. 哪些人适合参加软件测试培训?
  6. Linux:检查当前运行级别的五种方法
  7. 《Redis入门指南(第2版)》一第2章 准备
  8. 队列——PowerShell版
  9. 类似ngnix的多进程监听用例
  10. DIV限制宽度,字符断行,避免变形