这道题实际上是求一个序列的最长回文子串的长度,关于最长回文子串请看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——最长回文子串相关推荐

  1. 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)

    马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...

  2. 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门

    缘起 回文自动机(Palindrome auto machine PAM,有些地方称之为回文树)是回文问题的大杀器~  本文使用一道很简单的题目入门这个精巧的数据结构. hdu 2163 Palind ...

  3. leetcode 5 :Longest Palindromic Substring 找出最长回文子串

    题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum l ...

  4. python【力扣LeetCode算法题库】5- 最长回文子串

    5. 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab&quo ...

  5. leetcode算法题--最长回文子串

    题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/ 相关题目:最长回文子序列 动态规划 dp[i][j]表示从i到 ...

  6. LeetCode:Longest Palindromic Substring 最长回文子串

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  7. Manacher 求最长回文子串算法

    Manacher算法,是由一个叫Manacher的人在1975年发明的,可以在$O(n)$的时间复杂度里求出一个字符串中的最长回文子串. 例如这两个回文串"level"." ...

  8. 【字符串】最长回文子串 ( 动态规划算法 ) ★

    文章目录 一.回文串.子串.子序列 二.最长回文子串 1.动态规划算法 2.动态规划算法代码示例 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都 ...

  9. 【字符串】最长回文子串 ( 蛮力算法 )

    文章目录 一.回文串.子串.子序列 二.最长回文子串 1.蛮力算法 2.时间复杂度最优方案 一.回文串.子串.子序列 " 回文串 ( Palindrome ) " 是 正反都一样的 ...

最新文章

  1. Activity的知识
  2. 宝塔显示linux inode,Linux显示inode的信息
  3. python -- 进程
  4. Linux基本命令之文件查找、检索
  5. (10) 需求征集 -- 权限管理
  6. 【原】docker部署单节点consul
  7. if laytpl 非_Layui-神奇的layui.laytpl
  8. 初中英语听力软件测试,初中英语听力训练
  9. POJ - 2828
  10. python中numpy matplotlib绘图教程_利用numpy+matplotlib绘图的基本操作教程
  11. 关于app.config不能即时保存读取的解决方案
  12. 用java开发pc软件
  13. 实践三 网络嗅探与协议分析
  14. Android studio 之 Kotlin Not Configured
  15. MATLAB中median函数
  16. 萝卜小铺与店主的故事(十一)
  17. PCB、SCH转化为AD工程
  18. 计算机考研自我介绍大概多少字,考研复试中文自我介绍多少字合适
  19. 电脑计算机硬盘怎么加,电脑加装一个硬盘后怎么设置
  20. DVD转VCD,MPG文件参考

热门文章

  1. 双屏显示器,扩展显示,笔记本清晰,扩展显示屏模糊的解决办法
  2. MECE的五中分类法则
  3. centos7解决hadoop2.6.4多次格式化导致的slave节点datanode无法启动的问题
  4. pythonturtle八卦_太极八卦连环掌——python大法好
  5. grep同时过滤多个条件
  6. 扒一扒苹果的那些事儿—春节见闻随想
  7. python画图:小圆覆盖大圆问题
  8. 技术分享| 视频监控融合方案
  9. 软件测试工程师面试题及答案
  10. 2020年10月25日总结