51NOD 1092 回文字符串 LCS
Q:给定一个串,问需要插入多少字符才能使其成为回文串,也就是左右对称的串。
经典求LCS题,即最长公共子序列,不用连续的序列。考虑O(n2)解法,求LCS起码得有两个串,题中才给了一个串,另一个需要自己造,将给定的串反置,然后求这两个串的LCS。假设两个串为str1和str2,想办法将规模降低,分两种情况考虑:
- str1[i]==str2[j],则dp[i][j] = dp[i-1][j-1] + 1,其中dp[i][j]表示str1[1i]与str2[1j]的最长公共子序列长度。
- str1[i]!=str2[j],则dp[i][j] = max(dp[i-1][j], dp[i][j-1])。
这其实就是用小规模来推出稍大规模的解,也就是DP思想了。所求得的LCS就是最长回文子序列的长度了,没有包含在LCS中的字符都是需要为它们插入一份拷贝的。答案自然就是size-lcs。
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int dp[N][N];
char str[N], cpy[N];
int MaxMirrorSeq(char *sp, int size)
{
memcpy(cpy, sp, size+2);
reverse(cpy+1, cpy+1+size); //反置
memset(dp, 0, sizeof(dp));
int ans = 0;
for(int i=1; i<=size; i++)
{
for(int j=1; j<=size; j++)
{
if(str[i]==cpy[j]) dp[i][j] = dp[i-1][j-1]+1;
else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
ans = max(ans, dp[i][j]);
}
}
return ans;
}
int main()
{
freopen("input.txt", "r", stdin);
while(~scanf("%s", str+1)) {
int size = strlen(str+1);
cout<<size-MaxMirrorSeq(str, size)<<endl;
}
return 0;
}
51NOD 1092 回文字符串 LCS的更多相关文章
- 51nod 1092 回文字符串【LCS】
1092 回文字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符 ...
- 51Nod - 1092 回文字符串(添加删除字符LCS变形)
回文字符串 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符串都可以通过向中间添加一些字符,使之变为回文字符串. 例如:abbc 添加2个字符可以变为 acbbca, ...
- 51Nod 1092 回文字符串(LCS + dp)
51Nod 1092 数据结构暑假作业上出现的一题,学习了一下相关算法之后,找到了oj测试能AC. 1.回文串是一种中心对称的结构,这道题可以转变为求最长回文子序列长度的题目.(子序列:可以不连续) ...
- 51nod 1092 回文字符串 (dp)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092 这个题是poj-3280的简化版,这里只可以增加字符,设 dp[i ...
- 51Nod 1092 回文字符串
最开始毫无头绪,然后参照了一位dalao的博客,思路是一个正序的字符串将其逆序,然后求最长公共子序列(LCS),emm也属于动态规划. #include <iostream> #inclu ...
- 51Nod 1092 回文字符串 | 最长公共子序列变形
求字符串和其逆的最长公共子序列,需要添加的字符数就为长度-最长公共子序列长 #include "stdio.h" #include "string.h" #de ...
- 1042 数字0-9的数量 1050 循环数组最大子段和 1062 序列中最大的数 1067 Bash游戏 V2 1092 回文字符串
1042 数字0-9的数量 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 给出一段区间a-b,统计这个区间内0-9出现的次数. 比如 10-19,1出现11次 ...
- 51 Nod 1092 回文字符串
1092 回文字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每 ...
- 1092 回文字符串(LCSL_DP)
1092 回文字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符 ...
随机推荐
- md5,base64加密
import java.security.MessageDigest; import org.apache.commons.codec.binary.Base64;import org.apache. ...
- Appium——appium之mac环境安装
一.安装brew:Homebrew是一款Mac OS平台下的软件包管理工具执行:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubuserco ...
- SQL 行转列的两种做法
if object_id('tb')is not null drop table tbGocreate table tb(姓名 varchar(10),课程 varchar(10),分数 int)in ...
- free -m命令输出详解
free -m输出有3行: Mem:表示物理内存 -/+ buffers/cached:表示物理内存缓存 Swap:表示硬盘交换分区 其中Mem中的total.used.free.shared.buf ...
- python 使用csv.reader和csv.writer读写文件并转换成dataframe格式
import csv import pandas as pd ###csv.reader用法 ''' f=open(r"C:\Users\admin\pycdtest\wanyue\yuee ...
- java lamda
// 查询数据模拟 List<SealListViewVo> list = new ArrayList<SealListViewVo>(); for (int i = 0; i ...
- Java基础03-类型转换
1.自动转换 int->double char->String 例:double a=10; 2.强制类型转换 (类型名)表达式 注意:String不能强制转化为char public c ...
- linux命令strings
linux命令strings,其man信息如下:strings(1) GNU Development Tools ...
- Unity 滚轮实现UGUI ScrollView的缩放
本文原创,转载请注明出处http://www.cnblogs.com/AdvancePikachu/p/7908754.html 前段时间在做一个类似AnimationCurve的可视化编辑器,其中在 ...
- jquery日期插件jquery.datePicker参数
1.效果图 2.引入JS.CSS文件 jquery-ui.min.css和jquery-ui.min.js文件 Includes: core.js, widget.js, mouse.js, posi ...