poj 2955 Brackets(区间DP求最长匹配子串)

2015-11-21 01:02:10 · 作者: · 浏览: 6

思路:假设要求区间[i,j]的最长匹配字串,它必然可以从[i,j-1]转移而来,有可能是s[j]与s[i]发生“关系”(匹配或不匹配),一直到s[j-1],若不发生“关系”,即s[j]跟自己发生“关系”,用for循环枚举所有的可能,取最大值。

代码:

?

#include
  
   
#include
   
     #include
    
      using namespace std; char s[105]; int dp[105][105];//代表[i,j]区间的最长匹配子串 int check(int i,int j) { if(s[i]=='('&&s[j]==')') return 1; if(s[i]=='['&&s[j]==']') return 1; return 0; } int main() { while(scanf("%s",s)&&strcmp(s,"end")!=0) { memset(dp,0,sizeof(dp)); int len=strlen(s); for(int i=0;i
     
      

?