【Vijos 1327】回文词(DP)

题目描述

回文词是一种对称的字符串——也就是说,一个回文词,从左到右读和从右到左读得到的结果是一样的。任意给定一个字符串,通过插入若干字符,都可以变成一个回文词。你的任务是写一个程序,求出将给定字符串变成回文词所需插入的最少字符数。   
比如字符串“Ab3bd”,在插入两个字符后可以变成一个回文词(“dAb3bAd”或“Adb3bdA”)。然而,插入两个以下的字符无法使它变成一个回文词。

输入

第一行包含一个整数N,表示给定字符串的长度,3<=N<=5000   
第二行是一个长度为N的字符串,字符串由大小写字母和数字构成。

输出

一个整数,表示需要插入的最少字符数。

把字符串反转之后求两个的最长公共子序列,答案就是数组长度减去最长公共子序列的长度。

 1 #include <cstring>
 2 #include <cstdio>
 3
 4 int n,ans,x[5001],y[5001];
 5 char s1[5000],s2[5000];
 6 #define max(x,y) (x>y?x:y)
 7
 8 int main(void){
 9     scanf("%d%s",&n,&s1);
10     for(int i=0;i<n;++i)
11         s2[n-i-1]=s1[i];
12     for(int i=0;i<n;++i){
13         int s=0;
14         for(int j=0;j<n;j++){
15             if(s1[i]==s2[j])
16                 x[j]=s+1;
17             s=max(s,y[j]);
18         }
19         memcpy(y,x,(sizeof(x)));
20     }
21     for(int i=0;i<n;i++)
22         ans=max(ans,x[i]);
23     printf("%d",n-ans);
24 }

原文地址:https://www.cnblogs.com/gzh01/p/9650450.html

时间: 2024-09-29 19:31:21

【Vijos 1327】回文词(DP)的相关文章

Vijos1327回文词

回文词 回文词是一种对称的字符串--也就是说,一个回文词,从左到右读和从右到左读得到的 结果是一样的.任意给定一个字符串,通过插入若干字符,都可以变成一个回文词.你的任务是写 一个程序,求出将给定字符串变成回文词所需插入的最少字符数. 比如字符串"Ab3bd",在插入两个字符后可以变成一个回文词("dAb3bAd"或"Adb3bdA"). 然而,插入两个以下的字符无法使它变成一个回文词. 输入格式: 文件的第一行包含一个整数N,表示给定的字符串的

csuoj 1328: 近似回文词

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 355  Solved: 138 [Submit][Status][Web Board] Description 输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同

csu-1328 近似回文词 和 最长回文字符串

原博文地址:http://blog.csdn.net/u012773338/article/details/39857997 最长回文子串 描述:输入一个字符串,求出其中最长的回文子串.子串的含义是:在原串连续出现的字符 串片段.回文的含义是:正着看和倒着看是相同的,如abba和abbebba.在判断是要求忽略所有的标点和空格,且忽略大小写,但输出时按原样输出(首 尾不要输出多余的字符串).输入字符串长度大于等于1小于等于5000,且单独占一行(如果有多组答案,输出第一组). 输入 :每行有一个

UVA 401 Palindromes(回文词)

 回文词 Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Status Practice UVA 401 Appoint description:  acmparand  (2013-07-07)Luke  (2014-01-20) System Crawler  (2015-05-10) Description A regular palindrome is a string of

csu 1328: 近似回文词

1328: 近似回文词 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 394  Solved: 144 [Submit][Status][Web Board] Description 输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把所有字母转化成小写之后得到的串,b(S)是a(S)的逆序串. 比如

字符串 - 近似回文词 --- csu 1328

近似回文词 Problem's Link:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1328 Mean: 略. analyse: 直接暴力枚举每一个终点,然后枚举回文串的半径即可. Time complexity:O(n*m) Source code: // Memory Time // 1347K 0MS // by : Snarl_jsb // 2014-10-03-14.25 #include<algorithm> #include

UVa401 回文词

Palindromes A regular palindrome is a string of numbers or letters that is the same forward as backward. For example, the string "ABCDEDCBA" is a palindrome because it is the same when the string is read from left to right as when the string is

回文词

#include <iostream> #include <stdio.h> #include <iomanip> #include <string> using namespace std; const char *rev = "A 3 HIL JM O 2TUVWXY51SE Z 8 ";//字符A-9的镜像字符,没有镜像则为空格 const char * msg[] = {"not a palindrome",&

回文词 (Palindromes,Uva401)

例题 3-3 回文词 (Palindromes,Uva401) 输入一个字符中,判断它是否为回文串以及镜像串.输入字符串保证不含数字0.所谓回文串,就是反转以后和原串相同,如abba和madam.所有镜像串,就是左右镜像之后和原串相同,如2S和3AIAE.注意,并不是每个字符在镜像之后都能得到一个合法字符.在本题中,每个字符的镜像如图3-3所示(空白项表示该字符镜像后不能得到一个合法字符). 输入的每行包含一个字符串(保证只有上述字符.不含空白字符),判断它是否为回文串和镜像串(共4种组合).每