HDU 4745 Two Rabbits——最长回文子串
这道题实际上是求一个序列的最长回文子串的长度,关于最长回文子串请看http://blog.csdn.net/hao_zong_yin/article/details/72730732
这道题的特殊性就在于已知的序列是一个环,我们可以用倍增法将他扩展为一个链,然后求这个链长度为n以内的最长回文子串(大可不用考虑长度为n,只需求这个2*n序列的最长回文子串即可,因为求2*n序列解的过程实际上把前面所有解都求出来了,最后只要循环扫一便找出需要的解就可以,具体参考代码最后两个循环)
因为题目要求不能再经过已经经过的点,所以把最长回文子串的长度作为解有漏洞,如1 2 1 4,他的n以内的最长回文子串是1 2 1,长度为3,实际长度应该为4,出现了错误。
关于这个错误我就不做解释了,这个要自己理解一下,我解释的不周到的话可能会影响大家的思考,这里只给出解决方案:
求出长度为n-1以内的最长回文子串长度,将其 + 1后与原结果进行比较,大的那个即最终结果,具体参考代码最后一个循环
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int maxn = 2020;
int n, a[maxn], dp[maxn][maxn];int main()
{while (cin >> n && n) {for (int i = 1; i <= n; i++) {scanf("%d", &a[i]);a[i + n] = a[i];}memset(dp, 0, sizeof(dp));for (int i = 2 * n; i >= 1; i--) {for (int j = i + 1; j <= 2 * n; j++) {dp[i][i] = 1;if (a[i] == a[j]) dp[i][j] = dp[i + 1][j - 1] + 2;else dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);}}int ans = 0;for (int i = 1; i <= n; i++) {ans = max(ans, dp[i][i + n - 1]);}for (int i = 1; i <= n; i++) {ans = max(ans, dp[i][i + n - 2] + 1);}printf("%d\n", ans);}
}
HDU 4745 Two Rabbits——最长回文子串相关推荐
- 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)
马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...
- 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门
缘起 回文自动机(Palindrome auto machine PAM,有些地方称之为回文树)是回文问题的大杀器~ 本文使用一道很简单的题目入门这个精巧的数据结构. hdu 2163 Palind ...
- leetcode 5 :Longest Palindromic Substring 找出最长回文子串
题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...
- python【力扣LeetCode算法题库】5- 最长回文子串
5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...
- leetcode算法题--最长回文子串
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 相关题目:最长回文子序列 动态规划 dp[i][j]表示从i到 ...
- LeetCode:Longest Palindromic Substring 最长回文子串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- Manacher 求最长回文子串算法
Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串"level"." ...
- 【字符串】最长回文子串 ( 动态规划算法 ) ★
文章目录 一.回文串.子串.子序列 二.最长回文子串 1.动态规划算法 2.动态规划算法代码示例 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都 ...
- 【字符串】最长回文子串 ( 蛮力算法 )
文章目录 一.回文串.子串.子序列 二.最长回文子串 1.蛮力算法 2.时间复杂度最优方案 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都一样的 ...
最新文章
- Activity的知识
- 宝塔显示linux inode,Linux显示inode的信息
- python -- 进程
- Linux基本命令之文件查找、检索
- (10) 需求征集 -- 权限管理
- 【原】docker部署单节点consul
- if laytpl 非_Layui-神奇的layui.laytpl
- 初中英语听力软件测试,初中英语听力训练
- POJ - 2828
- python中numpy matplotlib绘图教程_利用numpy+matplotlib绘图的基本操作教程
- 关于app.config不能即时保存读取的解决方案
- 用java开发pc软件
- 实践三 网络嗅探与协议分析
- Android studio 之 Kotlin Not Configured
- MATLAB中median函数
- 萝卜小铺与店主的故事(十一)
- PCB、SCH转化为AD工程
- 计算机考研自我介绍大概多少字,考研复试中文自我介绍多少字合适
- 电脑计算机硬盘怎么加,电脑加装一个硬盘后怎么设置
- DVD转VCD,MPG文件参考