caída de contraseña
Los arqueólogos del Planeta X descubrieron un lote de códigos que quedaron de la antigüedad.
Estos códigos son secuencias unidas por las semillas de las plantas A, B, C y D.
Después de un análisis cuidadoso, se encuentra que estas cadenas de contraseña deben ser simétricas de adelante hacia atrás (es decir, lo que llamamos cadenas espejo).
Debido a la edad, muchas de estas semillas se han caído y, por lo tanto, pueden perder sus características de imagen especular.
Tu tarea es:
Dada una cadena de contraseña que ve ahora, calcule cuántas semillas necesita arrojar al menos desde el estado original, antes de que pueda convertirse en lo que es ahora.
Formato de entrada
Un total de una línea, incluida una cadena de caracteres compuesta por letras mayúsculas ABCD, que indica la cadena de contraseña que ve ahora.
Formato de salida
Muestra un número entero que indica al menos cuántas semillas se arrojaron.
Rango de datos
La longitud de la cadena de entrada no excede 1000
Ejemplo de entrada 1:
ABCBA
Ejemplo de salida 1:
0
Ejemplo de entrada 2:
ABDCDCBABC
Ejemplo de salida 2:
3
Análisis de ideas:
res = Agregue algunos caracteres para convertirse en un palíndromo <-equivalente a-> elimine algunos caracteres para convertirse en un palíndromo <-equivalente a-> longitud total: la longitud de la subsecuencia de palíndromo más larga
状态表示:
f[l][r] 表示所有s[l ~ r] 之间的回文子序列的集合的长度最大值
划分:
1. l和r都不在 f[l + 1][r - 1]
2. l在r不在 f[l][r - 1]
3. l不在r在 f[l + 1][r]
4. l和r都在 f[l + 1][r - 1] + 2
状态转移方程:
f[l][r] = max(f[l][r - 1], f[l + 1][r])
f[l][r] = max(f[l][r], f[l + 1][r - 1] + 2)
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int N = 1010;
char s[N];
int f[N][N];
int main()
{
scanf("%s", s);
int n = strlen(s);
for (int len = 1; len <= n; len ++)
for (int l = 0; l + len - 1 < n; l ++)
{
int r = l + len - 1;
if (len == 1) f[l][r] = 1;
else
{
f[l][r] = max(f[l][r - 1], f[l + 1][r]);
if (s[l] == s[r]) f[l][r] = max(f[l][r], f[l + 1][r - 1] + 2);
}
}
cout << n - f[0][n - 1] << endl;
return 0;
}