您的位置:首页
POJ 1159 Palindrome(字符串变回文:LCS)
2017-07-11 15:41
155 查看
POJ 1159 Palindrome(字符串变回文:LCS)
http://poj.org/problem?
id=1159
题意:
给你一个字符串, 问你做少须要在该字符串中插入几个字符能是的它变成一个回文串.
分析:
首先把原字符串和它的逆串进行匹配, 找出最长公共子序列. 那么最长公共子序列的字符串肯定是一个回文串. 所以原串剩下的部分是不构成回文的. 我们仅仅须要加入剩下部分的字符到相应位置, 原串自然就变成了一个回文.
所以本题的解为: n 减去 (原串与逆串的LCS长度).
令dp[i][j]==x表示串A的前i个字符与串B的前j个字符的子串的最长公共子序列LCS.
初始化: dp全为0.
状态转移:
A[i]==B[j]时: dp[i][j] = dp[i-1][j-1]+1.
A[i]!=B[j]时: dp[i][j] = max( dp[i-1][j] , dp[i][j-1] ).
终于所求: dp
[m].
程序实现用的2维滚动数组, 假设用int[5000][5000]会超内存.
AC代码:
http://poj.org/problem?
id=1159
题意:
给你一个字符串, 问你做少须要在该字符串中插入几个字符能是的它变成一个回文串.
分析:
首先把原字符串和它的逆串进行匹配, 找出最长公共子序列. 那么最长公共子序列的字符串肯定是一个回文串. 所以原串剩下的部分是不构成回文的. 我们仅仅须要加入剩下部分的字符到相应位置, 原串自然就变成了一个回文.
所以本题的解为: n 减去 (原串与逆串的LCS长度).
令dp[i][j]==x表示串A的前i个字符与串B的前j个字符的子串的最长公共子序列LCS.
初始化: dp全为0.
状态转移:
A[i]==B[j]时: dp[i][j] = dp[i-1][j-1]+1.
A[i]!=B[j]时: dp[i][j] = max( dp[i-1][j] , dp[i][j-1] ).
终于所求: dp
[m].
程序实现用的2维滚动数组, 假设用int[5000][5000]会超内存.
AC代码:
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=5000+5; int n; char s1[maxn],s2[maxn]; int dp[2][maxn]; int main() { while(scanf("%d",&n)==1) { scanf("%s",s1); for(int i=0;i<n;i++) s2[i]=s1[n-1-i]; memset(dp,0,sizeof(dp)); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(s1[i-1]==s2[j-1]) dp[i%2][j]=dp[(i-1)%2][j-1]+1; else dp[i%2][j]=max(dp[(i-1)%2][j] , dp[i%2][j-1]); } printf("%d\n",n-dp[n%2] ); } return 0; }
相关文章推荐
- POJ 1159 Palindrome(字符串变回文:LCS)
- POJ 1159 Palindrome(LCS~~回文)
- POJ1159 Palindrome(dp加最少字母构成回文字符串)
- POJ1159:Palindrome(LCS小应用 回文)
- poj1159 —— 一个字符串,求最少插入几个字符可以组成回文
- 【原】 POJ 1159 Palindrome 回文 动态规划 解题报告
- poj 1159 Palindrome (反串LCS 与 DP两种方法)
- POJ 1159--Palindrome(回文序列)
- hdu1513&&poj 1159 Palindrome(LCS+滚动数组)
- (字符串的处理4.7.16)POJ 1159 Palindrome(让一个字符串变成回文串需要插入多少个字符...先逆序,在减去公共子序列的最大长度即可)
- poj 1153 Palindrome(回文字符串)
- 动态规划 加最少字符使字符串变回文 POJ 1159 short水过!
- Poj1159 Palindrome(动态规划DP求最大公共子序列LCS)
- POJ 1159 Palindrome(lcs加滚动数组)
- POJ 1159 - Palindrome 优化空间LCS
- POJ-1159-Palindrome-回文-动态规划
- HDU1513 && POJ1159:Palindrome(LCS)
- poj 1159 Palindrome (LCS)
- 回文字符串的变形——poj1159
- poj 1159 Palindrome --- LCS减内存