[题目链接]
https://www.lydsy.com/JudgeOnline/problem.php?id=1260
[算法]
区间DP
[代码]
#include<bits/stdc++.h> using namespace std; #define MAXN 55 int i,j,k,t,len; int f[MAXN][MAXN]; char s[MAXN]; int main() { scanf("%s",s + 1); len = strlen(s + 1); memset(f,0x3f,sizeof(f)); for (i = 1; i <= len; i++) f[i][i] = 1; for (i = 2; i <= len; i++) { for (j = 1; j <= len - i + 1; j++) { k = j + i - 1; if (s[j] == s[k]) { f[j][k] = min(f[j + 1][k],f[j][k - 1]); f[j][k] = min(f[j][k],f[j + 1][k - 1] + 1); } else { for (t = j; t < k; t++) f[j][k] = min(f[j][k],f[j][t] + f[t + 1][k]); } } } printf("%d ",f[1][len]); return 0; }