poj 2955 Brackets(区间DP)
来源:互联网 发布:无网络装网卡驱动 编辑:程序博客网 时间:2024/05/16 09:29
经典区间DP--括号匹配
我们用dp[i][j]表示str[i]到str[j]能够匹配的最多括号数
则若str[i]与str[j]匹配可得dp[i][j] = dp[i+1][k-1]+dp[k+1][j](i<k<=j)
因为在计算dp[i][j]的过程中使用到dp[i+1][k-1]和dp[k+1][j]
所以要先计算出小区间的DP值
而外围循环从大到小刚好可以满足
代码如下:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define MAXN 110using namespace std;char str[MAXN];int dp[MAXN][MAXN];int main(void) { while(~scanf("%s", str)) { if(strcmp(str, "end") == 0) break; memset(dp, 0, sizeof(dp)); int len = strlen(str); //dp[i][j]表示以str[j]结尾的最大匹配长度 for(int i=len-1; i>=0; --i) { for(int j=i+1; j<len; ++j) { dp[i][j] = dp[i+1][j]; for(int k=i+1; k<=j; ++k) { if((str[i]=='('&&str[k]==')') || (str[i]=='['&&str[k]==']')) dp[i][j] = max(dp[i][j], dp[i+1][k-1]+dp[k+1][j]+2); } } } printf("%d\n", dp[0][len-1]); } 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)
- Problem - 1006_Tick and Tick
- top.location.href 不兼容 火狐和谷歌浏览器。。
- java基本语法+一点点提高
- 《组播扩展OSPF》
- HDU1128
- poj 2955 Brackets(区间DP)
- jsp标签
- 东方红是东方红地方搞活动
- 1-3认识html标签
- 虚拟IP原理 *********High Availability Cluster
- Swift教程_swift常见问题(0006)_完美解决swift数组索引是变量时的内存溢出
- 安卓混淆dontshrink
- char * const p 和char const *p 和 const char *p
- HDU 2037 今年暑假不AC (贪心)