//设上升序列的最后一个数字为第i个,那么就以第i-1个位分类标准,
//i-1可以没有,也可以是在数组中下标为1,下标为2
//一直到下标为i-1的数字
#include <iostream>
#include <algorithm>
using namespace std;
const int N = ;
int n;
int a[N], f[N];
int main() {
scanf("%d", &n);
for (int i = ; i <= n; i ++ ) scanf("%d", &a[i]);
for (int i = ; i <= n; i ++ ) {
f[i] = ; // 开始假设有a[i]一个数
for (int j = ; j < i; j ++ )
if (a[j] < a[i])//是否满足上升
f[i] = max(f[i], f[j] + );
}
int res = ;
for (int i = ; i <= n; i ++ ) res = max(res, f[i]); printf("%d\n", res); return ;
}

输出路径

#include <iostream>
#include <algorithm>
using namespace std;
const int N = ;
int n;
int a[N], f[N];
int g[N];//存储每一个转移是怎么转移过来的,每一个转移是怎么做出来的
int main() {
scanf("%d", &n);
for (int i = ; i <= n; i ++ ) scanf("%d", &a[i]);
for (int i = ; i <= n; i ++ ) {
f[i] = ; // 开始假设有a[i]一个数
g[i]=;//如果为0,表示只有一个数
for (int j = ; j < i; j ++ )
if (a[j] < a[i])//是否满足上升
if(f[i]<f[j]+) {
f[i]=f[j]+;
g[i]=j;//i状态是从j状态转移过来的
}
}
int k=;//记录最优解的下标
for(int i=; i<=n; i++)
if(f[k]<f[i])
k=i;
cout<<f[k]<<endl;//输出最大长度
for(int i=,len=f[k]; i<len; i++) {//一共f[k]个值
cout<<a[k]<<" ";//因为f[k]是以第k个数字结尾的序列,所以先把第k个输出
k=g[k];//从哪个转移过来
}
return ;
}

AcWing 895. 最长上升子序列的更多相关文章

  1. AcWing 896. 最长上升子序列 II

    #include<iostream> #include<algorithm> #include<vector> using namespace std; int m ...

  2. AcWing 897. 最长公共子序列

    #include <iostream> #include <algorithm> using namespace std; ; int n, m; char a[N], b[N ...

  3. 用python实现最长公共子序列算法(找到所有最长公共子串)

    软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...

  4. 动态规划之最长公共子序列(LCS)

    转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...

  5. [Data Structure] LCSs——最长公共子序列和最长公共子串

    1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...

  6. 动态规划求最长公共子序列(Longest Common Subsequence, LCS)

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  7. LintCode 77: 最长公共子序列

    public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common s ...

  8. 最长下降子序列O(n^2)及O(n*log(n))解法

    求最长下降子序列和LIS基本思路是完全一样的,都是很经典的DP题目. 问题大都类似于 有一个序列 a1,a2,a3...ak..an,求其最长下降子序列(或者求其最长不下降子序列)的长度. 以最长下降 ...

  9. 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题

    先要搞明白:最长公共子串和最长公共子序列的区别.    最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...

随机推荐

  1. linux查看防火墙状态和对外开放的端口状态

    1.查看防火墙状态         查看防火墙状态 systemctl status firewalld         开启防火墙 systemctl start firewalld        ...

  2. 手写mybatis框架笔记

    MyBatis 手写MyBatis流程 架构流程图 封装数据 封装到Configuration中 1.封装全局配置文件,包含数据库连接信息和mappers信息 2.封装*mapper.xml映射文件 ...

  3. web做题记录

    2020.1.19 南邮ctf 签到题 题目:key在哪里? 在火狐浏览器中右键选择打开查看源代码,在源代码可以看到如下 因为是第一次做这个题,不知道提交啥,我先提交了“admiaanaaaaaaaa ...

  4. python 集合运算交集&并集&差集

    差集>>> #两个列表的差集3 >>> ret3 = list(set(a) ^ set(b)) #两个列表的差集 >>> ret4=list(s ...

  5. 用友UAP NC 单据新增时业务单元不能带出问题处理

    用户需求新建一个主子表单据,由于刚从63环境升级到65环境,所以对于 65环境走单据流程生成节 点出的错误不了解. 直接建了集团级的主子表单据后,实施说需要的是业务单元级的主子表单据,跟用友开发沟通后 ...

  6. 在source insight project中删除文件夹或者文件的通用方法

    1.删除文件夹或者文件在硬盘上的数据 2.project->synchronize files...看到如下图,然后勾选remove missing files from project

  7. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.21.1.10-加-6.4)Atomic_Operations

    5.21.1.10 Write Atomicity Normal 这个特性控制AWUN和NAWUN参数的操作.设置的属性值在set Feature命令的Dword 11中表明. 如果提交Get Fea ...

  8. Spark Streaming:updateStateByKey报错 is not applicable for the arguments...

    ones.updateStateByKey(new Function2<List<Integer>, Optional<Integer>, Optional<Int ...

  9. 【转载】深入理解Java虚拟机笔记---运行时栈帧结构

    栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区的虚拟机栈(Virtual Machine Stack)的栈元素.栈帧存储了方法的局部变量表,操作 ...

  10. loj6277 数列分块入门题1

    裸题分块. #include <bits/stdc++.h> using namespace std; ],b[],n,m,t1,t2,t3,t4,sq; int main(){ ios: ...