求助
  • 板块学术版
  • 楼主szhqwq
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/8/27 12:14
  • 上次更新2023/10/27 13:28:56
查看原帖
求助
638084
szhqwq楼主2022/8/27 12:14

传送门

有没有哪位 dalaodalao 能帮我看看为啥代码不输出吗 QWQQWQ

CodeCode

#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;
}

QWQQWQ

ThanksThanks

2022/8/27 12:14
加载中...