想问个问题
查看原帖
想问个问题
480934
xqqQwQ_楼主2022/6/28 21:25

这样写为什么不对啊

#include<bits/stdc++.h>

using namespace std;

int dp[61][61];
string m;

int main()
{
	cin>>m;
	int len=m.length();
	memset(dp,0x3f3f3f3f,sizeof(dp));
	for(int i=1;i<=len;i++) dp[i][i]=1;
	for(int l=2;l<=len;l++)
	{
		for(int i=1;i<=len-l+1;i++)
		{
			int j=i+l-1;
			for(int k=i;k<j;k++)
			{
				
				if(m[i-1]==m[j-1]&&m[j-2]!=m[j-1]&&m[i-1]!=m[i]) dp[i][j]=min(dp[i][j],dp[i][i]+dp[j][j]+dp[i+1][j-1]-1;
				else if(m[k-1]==m[k]) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]-1);
				else dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]);
			}
		}
	}
	cout<<dp[1][len]<<endl;
	return 0;
}

思路大概就是"RBBBR"两端相同就-1,“RRBBBR”和“RBBBR”个数相同,不-1,如果两端不相同就把区间分成两段,中间两个相同就-1。

实测一部分数据会莫名其妙多出1

请大佬帮忙看看思路的问题,或者给一个长度较短的数据(长的数据太难找错了)

2022/6/28 21:25
加载中...