https://www.luogu.com.cn/problem/P1435
思路:迴文串有什麼性質?我們假設爲一個迴文串,將其翻轉後得到的字符串稱爲,那麼顯然的最長公共子序列爲。這就給了我們啓發,我們只要計算出的最長公共子序列,設爲,需要插入的最少字符數就等於。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pr pair<int,int>
using namespace std;
typedef long long ll;
char s1[1005],s2[1005];
int dp[1005][1005];
int main()
{
scanf("%s",s1+1);
int n=strlen(s1+1);
for(int i=1;i<=n;i++)
s2[i]=s1[n-i+1];
s2[n+1]='\0';
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(s1[i]==s2[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
printf("%d\n",n-dp[n][n]);
return 0;
}