AcWing 895. 最长上升子序列
//设上升序列的最后一个数字为第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. 最长上升子序列的更多相关文章
- AcWing 896. 最长上升子序列 II
#include<iostream> #include<algorithm> #include<vector> using namespace std; int m ...
- AcWing 897. 最长公共子序列
#include <iostream> #include <algorithm> using namespace std; ; int n, m; char a[N], b[N ...
- 用python实现最长公共子序列算法(找到所有最长公共子串)
软件安全的一个小实验,正好复习一下LCS的写法. 实现LCS的算法和算法导论上的方式基本一致,都是先建好两个表,一个存储在(i,j)处当前最长公共子序列长度,另一个存储在(i,j)处的回溯方向. 相对 ...
- 动态规划之最长公共子序列(LCS)
转自:http://segmentfault.com/blog/exploring/ LCS 问题描述 定义: 一个数列 S,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则 ...
- [Data Structure] LCSs——最长公共子序列和最长公共子串
1. 什么是 LCSs? 什么是 LCSs? 好多博友看到这几个字母可能比较困惑,因为这是我自己对两个常见问题的统称,它们分别为最长公共子序列问题(Longest-Common-Subsequence ...
- 动态规划求最长公共子序列(Longest Common Subsequence, LCS)
1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...
- LintCode 77: 最长公共子序列
public class Solution { /** * @param A, B: Two string. * @return: the length of the longest common s ...
- 最长下降子序列O(n^2)及O(n*log(n))解法
求最长下降子序列和LIS基本思路是完全一样的,都是很经典的DP题目. 问题大都类似于 有一个序列 a1,a2,a3...ak..an,求其最长下降子序列(或者求其最长不下降子序列)的长度. 以最长下降 ...
- 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题
先要搞明白:最长公共子串和最长公共子序列的区别. 最长公共子串(Longest Common Substirng):连续 最长公共子序列(Longest Common Subsequence,L ...
随机推荐
- Redis事务与可分布式锁
1 Redis事务 1.1 Redis事务介绍 l Redis的事务是通过MULTI,EXEC,DISCARD和WATCH这四个命令来完成的. l Redis的单个命令都是原子性的,所以 ...
- 剑指offer-面试题19-正则表达式匹配-字符串
/* 题目: 实现一个函数用来匹配包含'.'和'*'的正则表达式. '.'表示比配任意字符,‘*’表示匹配0个或多个字符串. */ /* 思路: 采用递归的方法. 基础条件:当字符串和模式串存在空的情 ...
- py二级习题(提取文本,并计数)
with open(r"C:\Users\mike1\Desktop\practice_txt.txt","r",encoding = "gbk&qu ...
- 1级搭建类111-Oracle 19c SI FS(Windows Server 2019)公开
Oracle 19c 单实例文件系统在Windows Server 2019上的安装 在线查看
- H5_0014:background-size设置
2,background-position
- archlinux install.txt
++++++ 注意事项+++ +++++++++++++++++++++++++++ 强烈建议新手移步 Arch Wiki > 新手指南 经验者请参阅 Arch Wiki > 安装指南 若 ...
- [Agc005D/At2060] Minimum Sum - 单调栈
鉴于早上那题让我怀疑单调栈白学,特意来复习下单调栈 题意 考虑按照每个元素对答案的贡献来统计,那么我们只需要找到每个元素左边右边第一个比它小的就可 这题给的又是排列,简直不能再良心 #include ...
- 《Vue.js实战》--推荐指数⭐⭐⭐⭐
献上pdf版本的百度网盘链接: https://pan.baidu.com/s/1YRwyR_ygW3tzBx1FbfjO1A 提取码: b255 先来看下目录: 看完这本书大概花了一个星期,走马观花 ...
- django css文件导入,模板继承
今天写了一下模板继承 刚开始感觉还行,也挺简单的 当只有html的时候还是能继承到的,代码如下.首先在父html文件里加入 {% block content %} {% block extracss ...
- Docker最全教程——从理论到实战(十三)
前言 树莓派(Raspberry Pi)是一台卡片电脑(只有信用卡大小),我们可以使用树莓派做很多事情,比如智能家居的中控.航空器.BT下载器.挖矿机.智能机器人.小型服务器(花生壳+网站)等等. 目 ...