POJ - 2955 Brackets(区间dp)
来源:互联网 发布:视频矩阵和解码器 编辑:程序博客网 时间:2024/04/30 05:19
题目大意:给出一个括号字符串,问这个字符串中符合规则的最长子串的长度
解题思路:区间dp,用dp[i][j]表示[i,j]这个区间内有符合规则的最长子串的长度
如果str[i] 和str[j]能构成 ()或者[],那么dp[i][j] = dp[i + 1][j - 1] + 2
剩下的情况就是
dp[i][j] = max(dp[i][j], dp[i][k] + dp[k + 1][j])
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 110;char str[N];int dp[N][N];void solve() { int len = strlen(str); memset(dp, 0, sizeof(dp)); for (int i = 1; i < len; i++) for (int j = 0; j + i < len; j++) { int k = j + i; if ( (str[j] == '(' && str[k] == ')') || (str[j] == '[' && str[k] == ']')) dp[j][k] = dp[j + 1][k - 1] + 2; for (int l = j; l < k; l++) dp[j][k] = max(dp[j][l] + dp[l + 1][k], dp[j][k]); } printf("%d\n", dp[0][len - 1]);}int main() { while (scanf("%s", str)) { if (strcmp(str, "end") == 0) break; solve(); } return 0;}
0 0
- Brackets(poj-2955)(区间dp)
- POJ 2955-Brackets(区间DP)
- poj 2955 Brackets(区间DP)
- POJ 题目2955 Brackets(区间dp)
- poj 2955 Brackets(区间dp)
- POJ 2955 Brackets (区间DP)
- poj 2955 Brackets(区间dp)
- poj 2955 Brackets (区间dp)
- POJ - 2955 Brackets(区间dp)
- POJ 2955 Brackets(区间DP水题)
- POJ 2955 Brackets(区间DP)
- poj--2955--Brackets(区间dp)
- POJ 2955Brackets(区间DP)
- POJ 2955Brackets(区间DP)
- poj 2955 Brackets (区间DP)
- 【POJ 2955】Brackets(区间DP)
- POJ 2955Brackets(区间dp)
- POJ 2955 Brackets (区间DP)
- GAL GAME 汉化教程攻略从零开始 1
- 第四周实践项目~单链表建立
- hdu4739Zhuge Liang's Mines 暴搜dfs
- poj2528(离散化 + 染色)
- java中scanner的使用(二)
- POJ - 2955 Brackets(区间dp)
- Effective c++读书笔记三
- JAVA基础的知识点
- 第一天在CSDN上开博客
- WebService(三)—JDK内置JAX-RS实现Rest WebService
- 寻人启事-陈红
- 对E-R模型向关系模式转换的认识
- 多线程系列四——整体总结
- Xcode 中编译出现 thread 1 breakpoint 1.1 的解决方案