UVA 11151 Longest Palindrome (最大回文串)
2013-03-28 08:36
393 查看
这里面读题一定要精准,首先它说的是从一个string里面take away一些字符,使得剩下的字符成为一个palindrome,这里求的是palindrome的最大长度,那么也就是说删除最少的字符使得这个string成为一个palindrome,并且可是在原串不连续的。
那么这个道题和之前做的longest palindrome还有有区别的,之前一定是substring,表示一定是在原串中连续的,及连通的,这个不一定。
那么如果是palindrome的话,那么从前往后和从后往前都是一样的,朋友说求一下本串和逆串的最大公共子序列,没有错,就是这样的,在本串中存在,在逆串中也存在,那么就说明从前读和从后读是一样的,而LCS就是最大palindrome了!
代码如下:
//LCS
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int c[1000][1000], T;
string s, ss;
int main()
{
scanf("%d", &T);
getchar();
while ( T-- ) {
getline( cin, s );
if ( s == "" ) {
printf("0\n");
continue;
}
ss.clear();
for ( int i = s.size() -1; i >= 0; ss += s[i], --i );
memset( c, 0, sizeof(c) );
int n = ss.size();
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= n; ++j ) {
if ( s[i-1] == ss[j-1] ) c[i][j] = c[i-1][j-1] + 1;
else c[i][j] = max( c[i-1][j], c[i][j-1] );
}
printf("%d\n", c
);
}
}
那么这个道题和之前做的longest palindrome还有有区别的,之前一定是substring,表示一定是在原串中连续的,及连通的,这个不一定。
那么如果是palindrome的话,那么从前往后和从后往前都是一样的,朋友说求一下本串和逆串的最大公共子序列,没有错,就是这样的,在本串中存在,在逆串中也存在,那么就说明从前读和从后读是一样的,而LCS就是最大palindrome了!
代码如下:
//LCS
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int c[1000][1000], T;
string s, ss;
int main()
{
scanf("%d", &T);
getchar();
while ( T-- ) {
getline( cin, s );
if ( s == "" ) {
printf("0\n");
continue;
}
ss.clear();
for ( int i = s.size() -1; i >= 0; ss += s[i], --i );
memset( c, 0, sizeof(c) );
int n = ss.size();
for ( int i = 1; i <= n; ++i )
for ( int j = 1; j <= n; ++j ) {
if ( s[i-1] == ss[j-1] ) c[i][j] = c[i-1][j-1] + 1;
else c[i][j] = max( c[i-1][j], c[i][j-1] );
}
printf("%d\n", c
);
}
}
相关文章推荐
- uva 10453 回文串dp uva 10739 uva 11151最长回文串 poj 3280
- UVa 11404 - Palindromic Subsequence(最大回文串,区间DP)
- SYSU-4, UVA 12711, 一般图最大(小)权匹配
- UVa 11509 Maximum Product(最大乘积)
- J - Sabotage - UVA 10480(最大流)
- uva 11045 My T-shirt suits me (二分图匹配 最大流)
- 【UVa】 10735 Euler Circuit 混合图的欧拉回路 最大流
- UVA 10099 最大的最小边。。
- uva 10827 - Maximum sum on a torus(连续最大和问题)
- UVa - 1220 - Party at Hali-Bula ( 树形DP 求最大独立集 )
- 【uva753/poj1087/hdu1526-A Plug for UNIX】最大流
- UVA-11584-Partitioning by Palindromes(区间DP 最小回文串数量)
- UVA 820 Internet Bandwidth(最大流)
- uva 11151 Longest Palindrome (最长公共子序列)
- UVA-11248-Frequency Hopping(最大流)
- uva 10122 Mysterious Mountain and ZOJ 1231 Mysterious Mountain (二分+二部图最大匹配)
- UVaLive LA 4726 UVa 1451 - Average (子序列最大平均数 数形结合 斜率优化 单调队列)
- uva 10594(最大流最小费)
- UVa 563 Crimewave (网络流构图+最大流+挺好的+双向边)
- UVA 10074 Take the Land(最大子矩阵和变形)