51Nod 1092 回文字符串(LCS + dp)
51Nod 1092
数据结构暑假作业上出现的一题,学习了一下相关算法之后,找到了oj测试能AC。
1.回文串是一种中心对称的结构,这道题可以转变为求最长回文子序列长度的题目。(子序列:可以不连续)
2.可以得到公式: ans(最少插入字符)= 字符串总长度 - 最长回文子序列长度
3.如何求最长回文子序列的长度呢? wsx dalao的思路是对区间进行维护(我暂时还写不出来),更一般的做法是动态规划(Dynamic Programming)。
dp 粗略的可以理解为一个状态向另一个状态的转移。一个维度表示一个变量。
仔细想一下的话,很难发现最长回文子序列的长度可以变为求原字符串与其反转字符串最长公共子序列长度(LCS)的题目。
求 LCS 就可以与 dp 联系起来了。
下面列一下状态转移方程:
1 /** 2 * Night gathers, and now my watch begins. 3 * It shall not end until my death. 4 * I shall take no wife, hold no lands, father no children. 5 * I shall wear no crowns and win no glory. 6 * I shall live and die at my post. 7 * I am the sword in the darkness. 8 * I am the watcher on the walls. 9 * I am the fire that burns against the cold, 10 * the light that wakes the sleepers, 11 * the shield that guards the realms of men. 12 * I pledge my life and honor to the Night's Watch, 13 * for this night, 14 * and all the nights to come. 15 */ 16 17 #include<bits/stdc++.h> 18 #define lson i<<2 19 #define rson i<<2|1 20 #define LS l,mid,lson 21 #define RS mid+1,r,rson 22 #define mem(a,x) memset(a,x,sizeof(a)) 23 #define gcd(a,b) __gcd(a,b) 24 #define ll long long 25 #define ull unsigned long long 26 #define lowbit(x) (x&-x) 27 #define pb(x) push_back(x) 28 #define enld endl 29 #define mian main 30 #define itn int 31 #define prinft printf 32 #pragma GCC optimize(2) 33 #pragma comment(linker, "/STACK:102400000,102400000") 34 35 const double PI = acos (-1.0); 36 const int INF = 0x3f3f3f3f; 37 const int EXP = 1e-8; 38 const int N = 1e5 + 5; 39 const int MOD = 1e9 + 7; 40 const int MAXN = 1e3 + 20; 41 42 using namespace std; 43 44 string s; //题目给的原字符串 45 string sr; //原字符串的翻转字符串 46 int dp[MAXN][MAXN]; //dp[i+1][j+1]状态表示为 (s0 ~ si) 和 (s0 ~ sj) 的LCS 47 48 int main() { 49 cin >> s; 50 mem (dp, 0); //dp数组初始化 51 sr = s; 52 reverse (sr.begin(), sr.end()); //构造翻转串 53 for (itn i = 1; i <= s.size(); ++i) 54 for (int j = 1; j <= sr.size(); ++j) 55 if (s[i - 1] == sr[j - 1]) 56 dp[i][j] = dp[i - 1][j - 1] + 1; 57 else 58 dp[i][j] = max (dp[i - 1][j], dp[i][j - 1]); 59 cout << s.size() - dp[s.size()][sr.size()] << endl; //ans = s的长度 - LCS(s, sr) 60 return 0; 61 }
转载于:https://www.cnblogs.com/chunibyo/p/9479545.html
51Nod 1092 回文字符串(LCS + dp)相关推荐
- 51nod 1092 回文字符串【LCS】
1092 回文字符串 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符 ...
- 51nod 1092 回文字符串
基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符串都可以通过向中间 ...
- 1092 回文字符串(51nod)
原题链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1092 这题其实可以把字符串str反转一下然后再求两个字符串的最 ...
- JAVA算法:回文字符串相关问题详解(回文字符串总结)
JAVA算法:回文字符串相关问题详解(回文字符串总结) Q1. 编写一个工具方法判断给定的字符串是否为回文字符串 例如:给定一个字符串"aabbaa",判断该字符串是否为回文字符串 ...
- DP之钢管切割,最长回文字符串,最长公共子串
在做LeetCode第3题的时候,用到了DP,但是自己对DP还是不了解,所以翻开算法导论,开始看动态规划喽,学好动态规划,走遍天下都不怕. 钢管切割 对于一根长n米的钢管,每个长度的价格不一样,对于长 ...
- NYOJ 回文字符串
回文字符串 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然, ...
- Palindrome(插入字符变成回文字符串)
题目:给定一个字符串,问最少插入多少字符,使字符串变成回文字符串. 思路:X:原字符串 Y:逆字符串 需要插入的字符数=X的长度-(X与Y的LCS的长度) 这里使用了滚动数组,压缩空间,原因: ...
- 回文字符串(51Nod-1092)
题目 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符串都可以通过向中间添加一些字符,使之变为回文字符串. 例如:abbc 添加2个字符可以变为 acbbca,也可以 ...
- leetCode第五题-求字符串最长回文字符串
原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...
最新文章
- Centos用yum安装X Winodw
- 服不服?40行Python代码,实现卷积特征可视化
- 【数据结构与算法】之深入解析“最长连续序列”的求解思路与算法示例
- python requests get请求_python+requests+new——get请求各种情况
- hexo的landfarz主题侧栏靠左
- 大数据之-Hadoop伪分布式_配置启动HDFS_并运行MR程序---大数据之hadoop工作笔记0023
- require() 源码解读
- 虚拟机同步器用易语言怎么写_安装虚拟机的好处或用处是什么/如有效地防止病毒...
- debug工具_Hackintool for【黑】mac V3.4.4中文版 黑苹果必装工具箱
- VGG-16网络结构
- 2、喷淋塔填料(PP多面空心球)是喷淋塔的核心-喷淋塔填料的基本要求
- 阿里云云解析DNS怎么样?云解析DNS有什么优势?
- C语言基础学习——基本数据类型(float型)
- 【编程书籍】《The Nature of Code》笔记 -《代码本色》2.力 5.物理函数库
- TBase数据库开源后重磅升级,复杂查询性能最高提升十倍
- 2.HTML元素、属性、标题
- Attribute 特性详解
- 一文彻底读懂三极管的工作原理,最通俗的解释,看完就明白了!
- Ansible 实战案例--Ansible Ad-Hoc 组件详解
- 腾讯云服务器linux系统有图形界面,腾讯云CentOS7搭建图形化界面并远程连接
热门文章
- 使用windows crypto API加密解密
- Spring管理Hibernate
- tomcat 设置xms xmx,采用startup.bat启动和采用操作系统服务启动区别
- 跟着锅子一步步学习32位汇编(4)---EFLAGS及标志位操作指令
- ios 获取是否静音模式_高效人士进阶-IOS
- java 获取pdf总页数_如何获取PDF文件的总页数 - iTextSharp,c#
- 测试面试题集-网络基础
- Tendermint推出2000万美元风投基金,促进Cosmos发展
- 跨Rollup转账应用HopProtocol将于4月份上线主网
- 赛锐信息:在云中交付SAP解决方案