Brackets POJ - 2955

Posted baccano-acmer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Brackets POJ - 2955相关的知识,希望对你有一定的参考价值。

解法

区间dp例题,每次枚举分段点的时候先更新如果开始到结束区间端点有闭合的括号,那么dp[start][end]=dp[start+1][end-1]+2其他照常枚举即可

代码

#include <iostream>
#include <cstring>
using namespace std;
int dp[666][666];
int main()
{
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  string a;
  while(cin>>a)
  {
    if(a[0]==‘e‘)
    break;
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=a.size();i++)
    for(int j=0;j<a.size();j++)
    {
      int end=i+j-1;
      if(end>a.size()-1)
      continue;
      if((a[j]==‘(‘&&a[end]==‘)‘)||(a[j]==‘[‘&&a[end]==‘]‘))
      dp[j][end]=dp[j+1][end-1]+2;
      for(int k=j;k<end;k++)
      dp[j][end]=max(dp[j][end],dp[j][k]+dp[k+1][end]);
    }
    cout<<dp[0][a.size()-1]<<"
";
  }
}

以上是关于Brackets POJ - 2955的主要内容,如果未能解决你的问题,请参考以下文章

POJ2955 Brackets

POJ 2955 - Brackets - [区间DP]

Brackets POJ - 2955 (区间dp)

POJ 2955 Brackets(区间DP)题解

POJ 2955 Brackets

POJ 2955?Brackets