企业策划 企业网站建设 品牌设计,宁波网站优化公司价格,对网站建设有什么样好的建设意见,深圳外贸建站网络推广哪家好回文词
ssl 1813
题目大意#xff1a;
给出一个式子#xff0c;最少要加多少个字符才能让这个式子是一个“回文词”
原题#xff1a;
题目描述
回文词是一种对称的字符串,也就是说:一个回文词,从左向右读和从右向左读的结果都是一样的.任意给定一个字符串,通过插入若干…回文词
ssl 1813
题目大意
给出一个式子最少要加多少个字符才能让这个式子是一个“回文词”
原题
题目描述
回文词是一种对称的字符串,也就是说:一个回文词,从左向右读和从右向左读的结果都是一样的.任意给定一个字符串,通过插入若干个字符,都可以变成一个回文词.你的任务是写一个程序,求出给定字符串变成回文词所需插入的最小字符数. 比如,字符串Ab3db,在插入两个字符后可以变成一个回文词(“dAb3bAd”,“Adb3bdA”),然而,插入两个以下的字符无法使它变成一个回文词.
输入
输入文件的第一行包含一个数表示给定字符串的长度N5000 文件的第二行是一个长度为的字符串。字符串仅由大写字母小写字母和数字构成。大写字母和小写字母被认为是不同的。
输出
输出只包括一行包含一个整数表示需要插入的字符数。
样例输入 b3bd样例输出 解题思路
把式子倒着存一遍然后和正着的做最长公共子序列再用n减去结果
代码
#includecstdio
#includestring
#includecstring
#includeiostream
using namespace std;
int n,a[5005][5005];
char b[5005],c[5005];
string str;
int main()
{scanf(%d,n);getchar();getline(cin,str);str str;for (int i1;in;i){b[i]str[i];c[i]str[n-i1];//反过来存}for (int i1;in;i)for (int j1;jn;j){a[i1][j]max(a[i1][j-1],a[(i1)1][j]);if (b[i]c[j])//相同a[i1][j]max(a[i1][j],a[(i1)1][j-1]1);//滚动数组}printf(%d,n-a[n1][n]);
}