有没有哪位 dalao 能帮我看看为啥代码不输出吗 QWQ
Code
#include <bits/stdc++.h>
#define int long long
#define AC return 0
#define il inline
#define M(a) memset(a,0,sizeof a)
using namespace std;
const int N=1010,INF=INT_MAX;
int dp[N][N];
string s;
int n;
il void init() { for(int i=0;i<n;i++) dp[i][i]=1,dp[i+1][i]=0; }
il void DP() {
init();
for(int i=n-2;i;i--) {
for(int j=i+1;j<n;j++) {
dp[i][j]=INF;
if((s[i]=='(' && s[j]==')') || (s[i]=='[' && s[j]==']')) dp[i][j]=min(dp[i][j],dp[i+1][j-1]);
for(int k=i;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
}
}
}
il void print(int l,int r) {
if(l>r) return;
if(l==r) {
if(s[l]=='(' || s[l]==')') cout<<"()";
else cout<<"[]";
return;
}
if(((s[l]=='(' && s[r]==')') || (s[l]=='[' && s[r]==']')) && dp[l][r]==dp[l+1][r-1]) {
cout<<s[l];
print(l+1,r-1);
cout<<s[r];
return;
}
for(int i=l;i<r;i++) {
if(dp[l][r]==dp[l][i]+dp[i+1][r]) {
print(l,i);
print(i+1,r);
return;
}
}
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int T;
cin>>T;
getchar();
while(T--) {
M(dp);
getline(cin,s);
getline(cin,s);
// getchar();
n=s.size();
// cout<<n<<endl;
if(!n) { cout<<"\n\n"; continue; }
DP();
print(0,n-1);
cout<<"\n";
if(T!=0) cout<<"\n";
}
AC;
}
QWQ
Thanks