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 ...
随机推荐
- py二级习题(猜猜我心中的数字)
import random number = random.randint(1,100) while True: inputnumber = int(input("请输入你心中的数字:&qu ...
- java连接Sqlserver数据库问题总结
网上说的要在:Sqlserver配置管理器中设置SQL Server网络配置->SQLEXPRESS的协议->TCP/IP的方法试了没啥用 不知道是不是自己测试设置的时候改了啥参数给整好了 ...
- iframe刷新另一个iframe
如果是程序: Response.Write("<script language=javascript>"); Response.Write ...
- PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)
正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA.例如:给定 8,DA=6,则 A 的“6 部分”PA 是 66,因为 A 中有 ...
- 【LInux01】学习Linux课程体系
知识 =>技能 需要大量的练习 相当于复盘 要有成就感 在一个领域深挖,再迁移到其他领域 1.两周以后的知识留存率: 主动学习: 动手实践:40% 讲给别人听:70% 写博客:是写教程,便 ...
- linux学习之编译-链接
在Windows下使用习惯了IDE,导致我们对程序的编译链接没有一个清晰的认识,甚至混淆了编辑器和编译器的概念.在学习Linux时,这些问题就暴露出来了. 实际上,我们应该严格区分一个程序从产生到执行 ...
- 【Unity|C#】基础篇(18)——正则表达式(Regex类)
[学习资料] <C#图解教程>:https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu.com/s/ ...
- LaTeX技巧003:实现一个章标题
代码如下: \documentclass[11pt]{book} \usepackage{graphicx} \usepackage{CJKfntef} \usepackage{color} \mak ...
- 【安卓开发】Webview简单使用
什么是WebView? 答:Android内置webkit内核的高性能浏览器,而WebView则是在这个基础上进行封装后的一个 控件,WebView直译网页视图,我们可以简单的看作一个可以嵌套到界面上 ...
- Selenium3+python自动化013-操作浏览器的Cookie
为什么要用Cookie?在测试多个页面时候可绕过验证码输入,直接添加cookie,也可以在添加唯一标识时候使用. 一.操作浏览器的Cookie 1.1.验证码的处理方式 说明:WebDriver类库中 ...