这样写为什么不对啊
#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
请大佬帮忙看看思路的问题,或者给一个长度较短的数据(长的数据太难找错了)