//设上升序列的最后一个数字为第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. javaSE学习笔记(10)---List、Set

    javaSE学习笔记(10)---List.Set 1.数据存储的数据结构 常见的数据结构 数据存储的常用结构有:栈.队列.数组.链表和红黑树. 1.栈 栈:stack,又称堆栈,它是运算受限的线性表 ...

  2. [SDOI2009]晨跑[最小费用最大流]

    [SDOI2009]晨跑 最小费用最大流的板子题吧 令 \(i'=i+n\) \(i -> i'\) 建一条流量为1费用为0的边这样就不会对答案有贡献 其次是对 \(m\) 条边建 \(u'-& ...

  3. python 的eval函数

    python中的eval()函数是用来计算所有数学的代数计算式,这样可以很快得到复杂代数式的结果. 例如:383660347*375705824-1796136991-1726898699*18994 ...

  4. c#快速热身

    一.选择结构: 1. if选择结构 2. if-else选择结构 3. if-else if-else if-else多重if选择结构 4. if-if-else-else 嵌套if选择结构 5. s ...

  5. 使用Xpath爬取酷狗TOP500的歌曲信息

    使用xpath爬取酷狗TOP500的歌曲信息, 将排名.歌手名.歌曲名.歌曲时长,提取的结果以文件形式保存下来.参考网址:http://www.kugou.com/yy/rank/home/1-888 ...

  6. JNA 使用总结

    JNA 是基于 JNI(Java Native Interface) 技术的开源工具,能够实现单方向的 Java 调用本地方法(通常是 C/C++ 编写的动态链接库中的函数),在 Windows 中是 ...

  7. npm命令笔记-----转自网络,仅供自己查看使用

    npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装 的包. npm常用指令 1.npm ...

  8. 微信小程序open-data userAvatarUrl圆角显示

    从年初开始,打开小程序,工具栏都会弹出这个提醒: 也就是,默认不弹出授权询问框,默认获取不到用户信息(头像.昵称等)! 如果你需要用到这个接口,可以尝试以下方法: 1.用 button 组件,将属性名 ...

  9. window snmp

    https://blog.csdn.net/weixin_30367543/article/details/99923014 https://jingyan.baidu.com/article/e3c ...

  10. navicat永久激活

    https://jingyan.baidu.com/article/f54ae2fc51f0311e92b84998.html