poj 2955 Brackets【区间DP】
2015-06-17 20:13
281 查看
题目链接:http://poj.org/problem?id=2955
题意:求回文子串的最大长度。
解法:枚举区间长度,更新答案。
代码:
题意:求回文子串的最大长度。
解法:枚举区间长度,更新答案。
代码:
[code]#include <stdio.h> #include <ctime> #include <math.h> #include <limits.h> #include <complex> #include <string> #include <functional> #include <iterator> #include <algorithm> #include <vector> #include <stack> #include <queue> #include <set> #include <map> #include <list> #include <bitset> #include <sstream> #include <iomanip> #include <fstream> #include <iostream> #include <ctime> #include <cmath> #include <cstring> #include <cstdio> #include <time.h> #include <ctype.h> #include <string.h> #include <assert.h> using namespace std; char s[110]; int dp[110][110]; int main() { while (scanf("%s", s+1) != EOF) { memset(dp,0,sizeof(dp)); if (strcmp(s+1, "end") == 0) break; int n = strlen(s + 1); for (int i = 1; i < n; i++) { if ((s[i] == '(' && s[i + 1] == ')') || (s[i] == '[' && s[i + 1] == ']')) dp[i][i + 1] = 2; } for (int k = 2; k <= n-1; k++) { for (int i = 1; i + k <= n; i++) { if ((s[i] == '(' && s[i + k] == ')') || (s[i] == '[' && s[i + k] == ']')) dp[i][i + k] = dp[i + 1][i + k - 1] + 2; for (int j = i; j <= i + k;j++) dp[i][i + k] = max(dp[i][i+k],dp[i][j] + dp[j][i+k]); } } printf("%d\n",dp[1] ); } return 0; }
相关文章推荐
- jquery使用jsonp跨域请求问题
- 【AS400系列】通过程序例子说明检查AS400用户密码的API-QSYGETPH
- scu 4439 Vertex Cover(暴搜+剪枝)
- EularProject 29: a^b的归并排序问题
- 【自用】 memset对于int、long long、float、double 的极值怎么清
- [LeetCode]ZigZag Conversion
- 软件架构之-架构视图
- 我的第一篇博客
- 项目杂记一
- 第一次冲刺06
- Service完全解析
- 第一次冲刺05
- 32位与64位下各类型长度对比
- tail跟踪日志时打印时间
- 第一次冲刺04
- Using Apache Maven
- Leetcode—Contains Duplicate II—Python
- javaweb中乱码的问题
- Fragment的生命周期
- R--线性回归诊断(二)