HDOJ1513 LCS水题
来源:互联网 发布:龙年限定琴女淘宝价格 编辑:程序博客网 时间:2024/05/20 07:34
Palindrome
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6434 Accepted Submission(s): 2128
Problem Description
A palindrome is a symmetrical string, that is, a string read identically from left to right as well as from right to left. You are to write a program which, given a string, determines the minimal number of characters to be inserted into the string in order to obtain a palindrome.
As an example, by inserting 2 characters, the string "Ab3bd" can be transformed into a palindrome ("dAb3bAd" or "Adb3bdA"). However, inserting fewer than 2 characters does not produce a palindrome.
As an example, by inserting 2 characters, the string "Ab3bd" can be transformed into a palindrome ("dAb3bAd" or "Adb3bdA"). However, inserting fewer than 2 characters does not produce a palindrome.
Input
Your program is to read from standard input. The first line contains one integer: the length of the input string N, 3 <= N <= 5000. The second line contains one string with length N. The string is formed from uppercase letters from 'A' to 'Z', lowercase letters from 'a' to 'z' and digits from '0' to '9'. Uppercase and lowercase letters are to be considered distinct.
Output
Your program is to write to standard output. The first line contains one integer, which is the desired minimal number.
Sample Input
5Ab3bd
Sample Output
2
Source
IOI 2000
Recommend
linle | We have carefully selected several similar problems for you: 1505 1506 1074 1025 1510
不难看出规律,构造一个和原串序列相反的字符串,然后求LCS,最后用总长度n-lcs就是答案了。
#include <iostream>#include <cstdio>#include <cmath>#include <cstring>using namespace std;const int maxn = 5005;char a[maxn],b[maxn];int i,j,k,n,dp[2][maxn];bool flag;void init(){ scanf("%s",a); for (i=0; i<n; i++) b[i] = a[n-1-i]; memset(dp,0,sizeof(dp));}int main(){ while (scanf("%d",&n)!=EOF){ init(); for (i=1; i<=n; i++) { for (j=1; j<=n; j++) { if (a[i-1]==b[j-1]) dp[1][j] = dp[0][j-1] + 1; else dp[1][j] = max(dp[0][j],dp[1][j-1]); } for (k=0; k<=n; k++) dp[0][k] = dp[1][k]; } printf("%d\n",n-dp[1][n]); } return 0;}
阅读全文
0 0
- HDOJ1513 LCS水题
- poj 3302 LCS水题
- uva 10066 lcs 水题
- LCS
- LCS
- lcs
- LCS
- LCS
- LCS
- LCS
- LCS
- LCS
- LCS
- lcs
- LCS
- LCS
- lcs
- LCS
- Android控件介绍及用法
- 梯度下降(Gradient Descent)
- OpenCV编程->双目标定(一)
- SQL Exercises/Pieces and providers
- 斐波那契数
- HDOJ1513 LCS水题
- shell
- JavaScript脚本——简单运算
- Akka和actor的相生相恋
- 时间线MindMap里程碑的使用方法
- 监督学习与非监督学习
- Android EditText弹出软键盘实现页面标题头不动,软键盘弹出在编辑框下面
- javaGUI知识(一)
- 由名为"CsdlToSsdlAndMslActivity" 的活动生成的SSDL无效,未找到具有固定名称“MySql.Data.MySqlClient”