样例本地通过但 WA on #1 求助,是UVA的什么奇怪格式要求吗
查看原帖
样例本地通过但 WA on #1 求助,是UVA的什么奇怪格式要求吗
378706
MoyunAllgorithm楼主2023/8/1 19:21
#include <bits/stdc++.h>
#define LL long long
#define PII pair<int,int>
#define FI first
#define SE second;
using namespace std;
int T;
int dp[105][105];
int pre[105][105];
char s[105];
int N;
int cnt=0;
void Print(int l,int r)
{
//	printf("%d %d %d\n",l,r,pre[l][r]);if(l==0) exit(0);
//	cnt++;
	//if(cnt==100) exit(0);
	if(l>r) return;
	if(l==r) 
	{
		if(s[l]=='('||s[l]==')') printf("()");
		else printf("[]");
		return;
	}
	if(pre[l][r]==-1)
	{
		printf("%c",s[l]);
		Print(l+1,r-1);
		printf("%c",s[r]);
		return;
	}
	int k=pre[l][r];
	Print(l,k);
	Print(k+1,r);
	return;
}
int main()
{
	scanf("%d",&T);
	while(T--)
	{
		scanf("%s",s+1);
		scanf("%s",s+1);
		N=strlen(s+1);
		if(N==0)
		{
		    puts("");
		    puts("");
		    continue;
		}
		for(int i=1;i<=N;i++)
			for(int j=1;j<=N;j++)
				dp[i][j]=1e9,pre[i][j]=0;
		for(int i=1;i<=N;i++) dp[i][i]=1,dp[i+1][i]=0;
		for(int len=2;len<=N;len++)
		{
			for(int l=1;l+len-1<=N;l++)
			{
				int r=l+len-1;
				if(s[l]=='('&&s[r]==')'||s[l]=='['&&s[r]==']')
				{
					if(dp[l][r]>dp[l+1][r-1]) 
					{
						dp[l][r]=dp[l+1][r-1];
						pre[l][r]=-1;
					}
				}
				for(int k=l;k<r;k++)
				{
					if(dp[l][k]+dp[k+1][r]<dp[l][r])
					{
						dp[l][r]=dp[l][k]+dp[k+1][r];
						pre[l][r]=k;
					}
				}
		//		printf("DP%d %d %d %d\n",l,r,dp[l][r],pre[l][r]);
			}
		}
//		return 0;
		Print(1,N);
		puts("");
		puts("");
	}
 	return 0;
}
2023/8/1 19:21
加载中...