poj 2955 区间dp 括号匹配

来源:互联网 发布:淘宝客服服务态度培训 编辑:程序博客网 时间:2024/05/22 23:03

题意:

求一个合法括号,问最长长度

 

 

思路:暴力dp

dp[i][j] 表示 区间[i,j] 上的最优解

#include<cstdio>#include<cstring>#include<vector>using namespace std;inline int Max(int a,int b){return a>b?a:b;}#define N 105char s[N];int dp[N][N];bool match(int i, int j){if(s[i] =='(' && s[j] ==')')return true;if(s[i] =='[' && s[j] ==']')return true;return false;}int main(){int i, j, k;while(scanf("%s",s+1), s[1]!='e'){int len = strlen(s+1);memset(dp, 0, sizeof(dp));for(i = len; i>=1; i --){for(j = i+1; j<=len; j++){dp[i][j] = Max(dp[i+1][j], dp[i][j-1]);for(k = i+1; k <= j; k++){if(match(i,k))dp[i][k] = Max(dp[i][k], dp[i+1][k-1]+2); dp[i][j]=Max(dp[i][j],dp[i][k]+dp[k+1][j]);  }}}printf("%d\n",dp[1][len]);}return 0;}


 

原创粉丝点击