LQ0125 密码脱落LCS
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0125 密码脱落LCS相关的知识,希望对你有一定的参考价值。
题目来源:蓝桥杯2016初赛 C++ A组G题
题目描述
X星球的考古学家发现了一批古代留下来的密码。这些密码是由A、B、C、D 四种植物的种子串成的序列。
仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串)。
由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征。
你的任务是:给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子。
输入格式
输入存在多组测试数据,对于每组测试数据输入一行,表示现在看到的密码串(长度不大于1000)
输出格式
对于每组测试数据要求输出一个正整数,表示至少脱落了多少个种子。
输入样例
ABCBA
ABDCDCBABC
输出样例
0
3
问题分析
用LCS来解决。
AC的C++语言程序如下:
/* LQ0125 密码脱落 */
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 1000;
int dp[N + 1][N + 1];
int lcs(string a, string b)
memset(dp, 0, sizeof dp);
int lena = a.length();
int lenb = b.length();
for (int i = 0; i < lena; i++)
for (int j = 0; j < lenb; j++)
if(a[i] == b[j])
dp[i + 1][j + 1] = dp[i][j] + 1;
else
dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j]);
return dp[lena][lenb];
int main()
string s;
while (cin >> s)
string t = s;
reverse(t.begin(), t.end());
cout << t.length() - lcs(s, t) << endl;
return 0;
以上是关于LQ0125 密码脱落LCS的主要内容,如果未能解决你的问题,请参考以下文章