主要是DP的转移方程不太会写。
#include <bits/stdc++.h>
using namespace std;
int maxn=0,dp[1005][1005][3][3],a[3];
string s;
void dfs(int l,int r)
{
if(a[l]!=r)
{
dfs(l,a[l]);
dfs(a[l]+1,r);
}
else if(a[l]==r)
{
dfs(l+1,r-1);
for(int i=0;i<=2;i++)
{
dp[l][r][0][0]=;
dp[l][r][1][1]=;
dp[l][r][2][2]=;
}
}
return;
}
signed main()
{
// freopen("bracket.in","r",stdin);
// freopen("bracket.out","w",stdout);
int n;
cin>>n>>a[1]>>a[2]>>s;
stack<int>q;
for(unsigned i=0;i<s.size();i++)
{
if(s[i]=='(')q.push(i);
else
{
int t=q.top();
q.pop();
a[t]=i;
}
}
dfs(0,n-1);
for(int i=0;i<=2;i++)for(int j=0;j<=2;j++)maxn=max(maxn,dp[0][n-1][i][j]);
cout<<maxn;
return 0;
}
自己已经写了大概轮廓了,求助于万能的谷民