POJ 2955 Brackets (记忆化搜索)
来源:互联网 发布:西北师大知行学院萧泰 编辑:程序博客网 时间:2024/05/29 13:20
题目类型 DP
题目意思
给出一个最长 100 的括号序列 问最长配对的括号子序列的长度是多少
括号的合法匹配有 () 和 [] 两种
例如 ((())) 最长是 6 而 [((]) 最长是 2
解题方法
记忆化搜索
参考代码 - 有疑问的地方在下方留言 看到会尽快回复的
#include <iostream>#include <cstdio>#include <cstring>using namespace std;char str[110];int dp[110][110];int DFS(int l, int r) {if(l >= r) return 0; // 肯定没配对if(r - l == 1) {if(str[l] == '(' && str[r] == ')') return 2; // 匹配返回2if(str[l] == '[' && str[r] == ']') return 2;return 0;}if(dp[l][r] != -1) return dp[l][r]; // 如果这段序列之前已经搜索过直接返回for( int i=l; i<=r; i++ ) {if(str[l] != '(' && str[l] != '[') dp[l][r] = max(dp[l][r], DFS(l+1, r)); // 如果序列的第一个不是左括号 直接去掉else { // 否则找一个左括号来匹配if(str[l] == '(' && str[i] == ')') dp[l][r] = max(dp[l][r], 2 + DFS(l+1, i-1) + DFS(i+1, r));if(str[l] == '[' && str[i] == ']') dp[l][r] = max(dp[l][r], 2 + DFS(l+1, i-1) + DFS(i+1, r));}if(str[r] != ')' && str[r] != ']') dp[l][r] = max(dp[l][r], DFS(l, r-1));else {if(str[i] == '(' && str[r] == ')') dp[l][r] = max(dp[l][r], 2 + DFS(l, i-1) + DFS(i+1, r-1));if(str[i] == '[' && str[r] == ']') dp[l][r] = max(dp[l][r], 2 + DFS(l, i-1) + DFS(i+1, r-1));}}if(dp[l][r] == -1) dp[l][r] = 0;return dp[l][r];}int main() {freopen("in", "r", stdin);while(scanf("%s", str)) {if(strcmp(str, "end") == 0) break;memset(dp, -1, sizeof(dp));int len = strlen(str);int ans = DFS(0, len-1);printf("%d\n", ans);}return 0;}
0 0
- POJ 2955 Brackets (记忆化搜索)
- POJ 2955 Brackets(区间DP, 记忆化搜索)
- POJ 2955 Brackets (DP Or 记忆化搜索 总结)
- 【记忆化搜索】POJ-1141 Brackets Sequence
- poj 2955 Brackets (区间dp)||(记忆话搜素)
- 【记忆化搜索】POJ
- 149D - Coloring Brackets(区间DP 记忆化搜索)
- URAL 1183 Brackets Sequence 记忆化搜索 + DFS
- Ural 1183 Brackets Sequence(区间DP+记忆化搜索)
- POJ-1088 记忆化搜索
- poj-3280-记忆化搜索
- poj 1143 记忆化搜索
- poj 1179 记忆化搜索
- poj 1664 记忆化搜索
- poj 1170 记忆化搜索
- poj 3249 记忆化搜索
- POJ 1661 记忆化搜索
- poj 1088(记忆化搜索)
- Java中Synth外观学习(五)--定制按钮
- jquery的一些事件
- thinkPHP下的widget挂件原理与使用方法
- Android开源项目分类汇总
- [资料共享] Arduino教程(入门篇)——各版本驱动安装方法
- POJ 2955 Brackets (记忆化搜索)
- VT-IRX-433M 发射模块,433M接收模块,无线收发模块,遥控模块
- C#中的DBNull、Null、String.Empty和“”
- 进程体系结构
- class-dump分析app
- 还原数据库的时候 无法处理数据库 'XXXXX',因为它正由此会话使用。建议在执行此操作时使用 master 数据库。
- 什么是checkpoint
- Java中的位运算
- 常用的HTML代码