或者给个简短易调的hack数据也行啊,想不明白哪错了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int f[55][55];
string s;
int dfs(int l,int r){
if(f[l][r]!=-1)return f[l][r];
char ch=s[r+1];
if(l>r)return f[l][r]=0;
if(l==r)return f[l][r]=s[l]==ch?0:1;
vector<int> pos;
pos.push_back(l-1);
for(int i=l;i<=r;i++){
if(s[i]==ch)pos.push_back(i);
}
pos.push_back(r+1);
int tep=0x3f3f3f3f;
if(pos.size()!=2){
tep=0;
for(int i=1;i<pos.size();i++){
tep+=dfs(pos[i-1]+1,pos[i]-1);
}
}
f[l][r]=0x3f3f3f3f;
for(int i=l;i<=r;i++){
if(s[i]==s[l]){
f[l][r]=min(f[l][r],dfs(l+1,i-1)+1+dfs(i+1,r));
}
}
f[l][r]=min(f[l][r],tep);
return f[l][r];
}
signed main(){
cin>>s;
int n=s.length();
s='*'+s+'*';
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f[i][j]=-1;
cout<<dfs(1,n);
}