#include <iostream>
using namespace std;
int lps(string seq, int i, int j) {
int len1, len2;
if (i == j)//当i=j时,则此时扫描到的项是一定可以放入该回文子序列中并且对回文子序列的长度贡献为1
return ;
if (i > j)//当i>j时,即扫描到的左边的数在右边已经扫描过了,所以该项及往后的所有项都是已经扫描过的项,对回文子序列的长度贡献为0
return ;
if (seq[i] == seq[j])//当扫描到相同的字符时
return lps(seq, i + , j - ) + ;//此时这两个相同字符必定可以放入回文子序列中,故总计对回文子序列的长度贡献为2
len1 = lps(seq, i, j - );//如果没有扫描到相同字符,则此时有两种情况,一种是此时的第i个字符对最长回文子序列的长度有贡献
len2 = lps(seq, i + , j);//另一种是此时的第j个字符对最长回文子序列的长度有贡献
if (len1 > len2)//比较上面两种情况的回文子序列的长度大小,返回其中长度较大的回文子序列的长度
return len1;
return len2;
}
int main() {
string seq = "acmerandacm";//给出字符串
int n = seq.size();//统计字符串的长度
cout << lps(seq, , n - ) << endl;//计算最长回文子序列
return ;
}

输出:_________

【一个计算最长回文子序列的例程,值得一背】

  首先是关于扫描的事项

    一是可能有的时候会比较难理解为什么当 i == j 时对回文子序列的贡献为1,例如:abcda,除了头尾的a对回文子序列的贡献为2,中间的bcd不管是怎么扫描,对于a _ a 这个回文子序列来讲,b或c或d是肯定可以填入其中的空格中的,所以对回文子序列的贡献为1

    二是要明白递推公式,除了扫描到相等的项时一定是最长回文子序列中的一部分且对其贡献为2外,那么,当扫描到不相等的两个项时,该怎么想呢?

    对于不相等的两个项 [ i ] [ j ] ,其回文子序列的长度无非两种情况

    ①先扫描 [ i ][ j-1 ] 所得的回文子序列长度比较长  ②先扫描 [ i-1 ][ j ] 所得的回文子序列长度比较长

    那么我们分别递归两种情况,然后比较这两种情况中哪一个回文子序列更长,进而可以求出最长的回文子序列啦

  然后是一些关于阅读程序的心得

    首先,读程序建议从主程序开始读,先大概了解程序后在看函数往往有奇效(反正我是这样感觉的)

     其次,当你阅读程序时,不建议只是扫一遍,最好是能把相应步骤的关键点和一些比较难一眼看出来意义的段落加上注释(可能是因为我还是一个蒟蒻才需要这样做吧......)

     最后,当你对一段程序迷惑时,请你:跟着程序跑一遍-->用编译器再跑一遍-->对于自己有疑虑的点,请造出来然后用编译器跑一遍

     总之,多动手。

     学OI就是一个积累和学习的过程,码得越多,看的越多,就懂得越多。

NOIP2016提高组初赛(2)四、读程序写结果3、求最长回文子序列的更多相关文章

  1. NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 2.

    洛谷秋令营day1模拟赛原地爆炸,心态崩了.于是打算写一下初赛题放松一下. 上次胡乱分析到了选择题,这次我想说说后面的题. 问题求解 T1.有一个1x8的方格图形,黑白两色填涂每个方格,两个黑格并不能 ...

  2. NOIP2016提高组初赛(2)四、阅读程序写结果2、

    #include <iostream> using namespace std; int main() { ][], b[][]; ]; string tmp; , j = , k = , ...

  3. NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析 Part 3.

    *已更新 胡乱分析的第三部分,程序填空(所谓的完善程序) 说到初赛,好像本周六就是了.哇好激动.. 填空题都是玄学.也许get到点了就会好做一些.. (标红的是填在空里的答案) T1.交朋友 (小矮个 ...

  4. NOIP2016提高组初赛(C++语言)试题 个人的胡乱分析

    最近在做历年的初赛题,那我捡几道比较有代表性的题说一下好了 原题可以在这里看:https://wenku.baidu.com/view/10c0eb7ce53a580217fcfede.html?fr ...

  5. NOIP2016提高组初赛(1)

    一.选择题 6.后缀表达式,使用二叉树来求解,正常情况下的表达式a*(b+c)- d为中序遍历的二叉树. 即 若转换为后缀表达式(左右根)则为abc+*d- 14.代数字进去,多试几遍: 三.问题求解 ...

  6. NOIP2018提高组初赛准备

    NOIP2017提高组初赛错题 一.单项选择题(共15 题,每题1.5 分,共计22.5 分:每题有且仅有一个正确选项) 4. 2017年10月1日是星期日,1949年10月1日是( ). A. 星期 ...

  7. NOIP2018提高组初赛知识点

     (传说,在神秘的初赛中,选手们经常互相爆零以示友好……) 历年真题:ti.luogu.com.cn 以下标题中打*的是我认为的重点内容 一.关于计算机 (一)计算机组成 硬件组成: 1. 控制器(C ...

  8. NOIP提高组初赛难题总结

    NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...

  9. noip2018提高组初赛试题

    一.单项选择题(共 10 题,每题 2 分,共计 20 分: 每题有且仅有一个正确选项) \2. 下列属于解释执行的程序设计语言是( ). A. C B. C++ C. Pascal D. Pytho ...

随机推荐

  1. hbase+springboot+redis实现分页

    实现原理: 1.读取hbase数据每页的数据时多取一条数据.如:分页是10条一页,第一次查询hbase时, 取10+1条数据,然后把第一条和最后一条rowkey数据保存在redis中,redis中的k ...

  2. Android 开发笔记___SD卡基本操作

    package com.example.alimjan.hello_world; /** * Created by alimjan on 7/5/2017. */ import android.ann ...

  3. Task及Mvc的异步控制器 使用探索

    微软的Task已经出来很久了,一直没有去研究,以为就是和Thread差不多的东西.直到最近看到了Task的使用介绍,发现比Thread的语法要精炼多了,于是便在项目中用上了. 结果就出问题了,数据库连 ...

  4. Oracle 数据库常用操作语句大全

    一.Oracle数据库操作 1.创建数据库      create database databasename 2.删除数据库      drop database dbname 3.备份数据库 完全 ...

  5. ML神器:sklearn的快速使用

    传统的机器学习任务从开始到建模的一般流程是:获取数据 -> 数据预处理 -> 训练建模 -> 模型评估 -> 预测,分类.本文我们将依据传统机器学习的流程,看看在每一步流程中都 ...

  6. 通讯框架 T-io 学习——给初学者的Demo:ShowCase设计分析

    前言 最近闲暇时间研究Springboot,正好需要用到即时通讯部分了,虽然springboot 有websocket,但是我还是看中了 t-io框架.看了部分源代码和示例,先把helloworld敲 ...

  7. Spring AOP高级——源码实现(2)Spring AOP中通知器(Advisor)与切面(Aspect)

    本文例子完整源码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/Spring%20AOP%E9%A ...

  8. Spring JDBC 示例

    在使用普通的 JDBC 数据库时,就会很麻烦的写不必要的代码来处理异常,打开和关闭数据库连接等.但 Spring JDBC 框架负责所有的低层细节,从开始打开连接,准备和执行 SQL 语句,处理异常, ...

  9. 隐藏17年的Office远程代码执行漏洞(CVE-2017-11882)

    Preface 这几天关于Office的一个远程代码执行漏洞很流行,昨天也有朋友发了相关信息,于是想复现一下看看,复现过程也比较简单,主要是简单记录下. 利用脚本Github传送地址 ,后面的参考链接 ...

  10. 为Go程序创建最小的Docker Image

    本文将会介绍如何使用docker打包一个golang编写的应用程序,最终的产物就是一个makefile文件,可别小瞧这短短几行代码,涉及的知识点可不少,接下来我们就仔细剖析一下吧. FROM gola ...