- 密码脱落
题目链接
(区间dp解)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
const int N=1010;
string s;
int f[N][N];
int solve(){
string ss;
cin>>s;
// s+=ss;
int res=0;
int n=s.size();
//枚举长度
for(int len=1;len<=n;len++){
//枚举左边界
for(int i=0;i+len-1<=n;i++){
//根据左边界和长度计算右边界
int j=i+len-1;
//主要代码
if(len==1)
f[i][j]=1;
else{
f[i][j]=max(f[i][j-1],f[i+1][j]);
if(s[i]==s[j]){
f[i][j]=max(f[i][j],f[i+1][j-1]+2);
}
}
}
}
//最终结果f[][]是看输入是如何操作的
return n-f[0][n-1];
}
int main(){
cout<<solve()<<endl;
return 0;
}