动态规划训练9 [Brackets POJ - 2955 ]
2017-06-22 14:32
232 查看
Brackets
POJ - 2955 再明显不过的区间DP的题目了,要求求出给出符号式中最大匹配的括号数。
考虑区间[l,r],如果str[l]与str[r]匹配了,那么转移方程为dp[l][r] = max(dp[l][r],dp[l+1][r-1]+ 2);
然后考虑将区间分成2部分
dp[l][r] = max(dp[l][r],dp[l][k]+dp[k+1][r]);
然后就成了,就这么简单
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
const int MAX = 105;
char str[MAX];
int dp[MAX][MAX];
int mp[128];
int main(){
mp['('] = ')';
mp['['] = ']';
while(gets(str)){
memset(dp,0,sizeof(dp));
if(str[0] == 'e'){
break;
}
int n = strlen(str);
for(int k = 2;k <= n;k++){
for(int i = 0;i + k <= n;i++){//左闭右开
for(int j = i + 1;j < i + k;j++){
dp[i][i+k] = max(dp[i][i + k],dp[i][j] + dp[j][i+k]);
if(mp[str[i]] == str[i+k-1])
dp[i][i+k] = max(dp[i][i+k],dp[i+1][i+k-1]+2);
}
}
}
printf("%d\n",dp[0]
);
}
return 0;
}
/*
)[)(
*/
相关文章推荐
- 动态规划训练7 [Halloween Costumes ]
- 动态规划训练16 [Doing Homework HDU - 1074 ]
- 蓝桥杯训练:动态规划——苹果二叉树
- 动态规划A - Robberies HDU - 2955
- 区间合并类动态规划训练
- 2014专题训练之动态规划总结
- 动态规划训练5 [回文词]
- 动态规划训练17 [Super Jumping! Jumping! Jumping! HDU - 1087 ]
- 算法训练 装箱问题 递归动态规划
- 动态规划专题训练
- 华为训练题目:初级——合唱队(递增子序列,DP动态规划问题)
- 动态规划训练18 [免费馅饼 HDU - 1176 ]
- 动态规划1-Robberies-POJ-2955
- 动态规划训练6 [统计单词个数]
- 蓝桥杯 ALGO-21算法训练 装箱问题(动态规划,01背包)
- ACM: 简单动态规划题 poj 2955
- poj 2955 动态规划--括号匹配
- 动态规划专题训练:(全部是紫书上的题——做到吐)
- 动态规划训练19、最短路 [Help Jimmy POJ - 1661 ]
- 动态规划-hdu 2955