P4170 80分不知道错哪了感谢
using namespace std;
#include<bits/stdc++.h>
#define ll long long
ll read(){
ll summ=0;ll f=1;char ch;
ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-'){
f=-1;
}
ch=getchar();
}
while(ch>='0'&&ch<='9'){
summ=summ*10+ch-'0';
ch=getchar();
}
return f*summ;
}
string a;
ll f[100][100];ll cnt=0;
int main(){
cin>>a;
ll lena=a.size();
a='-'+a;
memset(f,0x3f,sizeof(f));
for(int i=1;i<=lena;i++){
f[i][i]=1;
if(i!=lena){
if(a[i]==a[i+1]){
f[i][i+1]=1;
}else{
f[i][i+1]=2;
}
}
}
for(int len=3;len<=lena;len++){
for(int l=1;l+len-1<=lena;l++){
ll r=l+len-1;
ll cn=0;
if(a[l]==a[l+1]&& a[r-1]==a[r]){//首尾和它前一个后一个分别相等
f[l][r]=min(f[l][r],f[l+1][r-1]);
// cout<<l<<"--"<<r<<"--1--"<<f[l][r]<<endl;
}else if(a[l]==a[r]){//首尾相等
f[l][r]=min(f[l][r],f[l+1][r-1]+1);
// cout<<l<<"--"<<r<<"--11--"<<f[l][r]<<endl;
}else f[l][r]=min(f[l][r],f[l+1][r-1]+2);
// cout<<l<<"--"<<r<<"--111--"<<f[l][r]<<endl;
if(a[l]==a[l+1]||a[l]==a[r]){
f[l][r]=min(f[l][r],f[l+1][r]);
}else f[l][r]=min(f[l][r],f[l+1][r]+1);
if(a[r]==a[r-1]||a[r]==a[l]){
f[l][r]=min(f[l][r],f[l][r-1]);
}else f[l][r]=min(f[l][r],f[l][r-1]+1);
}
}
cout<<f[1][lena];
return 0;
}