码迷,mamicode.com
首页 > 其他好文 > 详细

Brackets POJ - 2955

时间:2019-01-26 22:05:38      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:out   cin   int end   stream   tar   分段   例题   eof   main   

解法

区间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]<<"\n";
  }
}

Brackets POJ - 2955

标签:out   cin   int end   stream   tar   分段   例题   eof   main   

原文地址:https://www.cnblogs.com/baccano-acmer/p/10325022.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!