学习算法竞赛的新手,思路参考紫书例9-7,具体操作见注释...
#include<iostream>
#include<cstring>
using namespace std;
const int maxn = 1000 + 7;
bool s[maxn][maxn];//s[i][j]表示从下标i到下标j这个小区间里是否为回文串
int dp[maxn];//dp[i]表示下标0到下标i的最少回文串值
/*dp[i]=min{dp[j]+1|s[j+1~i]是回文串}*/
int main() {
ios::sync_with_stdio(false), cin.tie(0);
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string input;//读入字符串
cin >> input;
int size = input.size();//字符串长度
int idx = 0;//下标初始化为0
memset(s, 0, sizeof(s));//初始化s
memset(dp, 0, sizeof(dp));//初始化dp
while (idx != size) {//遍历以填充s数组,这个while循环是以idx为中心向两边枚举