最长上升子序列(acwing 895 acwing 896 acwing1017)
文章目录
- 理解
- acwing 895 最长上升子序列
- acwing 896 最长上升子序列2
- acwing 1017 怪盗基德的滑翔翼
理解
是动态规划的题目,就是找一个数组中存在的连续的子序列。
最长上升子序列(Longest Increasing Subsequence,LIS),在计算机科学上是指一个序列中最长的单调递增的子序列。 – 百度
acwing 895 最长上升子序列
点击跳转至acwing 895
f【】数组表示,当前位置最大能有多少连续的数构成子序列。
#include<iostream>
#include<cstring>
using namespace std ;
const int N = 1010 ;
int f[N] , a[N];
int main()
{int n ;cin >> n ;for(int i = 0 ; i < n ; i++){cin >> a[i] ;f[i] = 1 ;}int res = 1;for(int i = 1 ; i < n ; i++){for(int j = 0 ; j < i ; j++){if(a[i] > a[j]){f[i] = max(f[i] , f[j] + 1);}}res = max(res,f[i]);}cout << res ;return 0 ;
}
acwing 896 最长上升子序列2
点击跳转至acwing 896
优化:
思路:每次在q数组中找比a[i]小的最大的数,然后把这个数的下一位更新成a[i](二分在l=mid的情况下,是要在模板上加1的,也就是右端点)
#include <iostream>
#include <algorithm>using namespace std;
const int N = 1e5 + 10;
int n;
int a[N], q[N];int main(){cin >> n;for(int i = 0; i < n; i ++) cin >> a[i];int len = 0;for(int i = 0; i < n; i ++){int l = 0, r = len; // 二分找到最大的小于当前数x的数cwhile(l < r){int mid = l + r + 1 >> 1;if(q[mid] < a[i]) l = mid;else r = mid - 1;}q[l + 1] = a[i];len = max(len , l + 1) ;}cout << len << endl;return 0;
}
acwing 1017 怪盗基德的滑翔翼
点击跳转至acwing 1017
在初始化的时候,直接在输入a数组值的时候就把f数组初始化。
思路:正反方向进行基础的LIS
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std ;
const int N = 110;
int a[N] , f[N];
int main()
{int k ;cin >> k ;while(k--){int n ;cin >> n ;int res = 0 ;for(int i = 0; i< n ; i++){cin >> a[i] ;f[i] = 1 ;}for(int i = 1 ; i< n ; i++){for(int j = 0 ; j < i ; j++){if(a[j] < a[i]){f[i] = max(f[i] , f[j] + 1);}}res = max(res , f[i]);}for(int i = 0; i< n ; i++){f[i] = 1 ;}for(int i = n - 2; i >= 0 ; i--){for(int j = n - 1 ; j > i ; j--){if(a[j] < a[i]){f[i] = max(f[i] , f[j] + 1) ;}}res = max(res , f[i]);}cout << res << endl;}return 0 ;
}
最长上升子序列(acwing 895 acwing 896 acwing1017)相关推荐
- 【动态规划专题】最长上升子序列模型
题目 算法 A.AcWing 895. 最长上升子序列 模板 B.AcWing1017. 怪盗基德的滑翔翼 最长上升子序列/最长下降子序列 C.AcWing 1014. 登山 最长上升子序列/最长下降 ...
- (贪心+最长上升子序列) acwing 896. 最长上升子序列 II
896. 最长上升子序列 II 题目链接https://www.acwing.com/problem/content/898/ 题目: 思路:在队列里求出小于t的最大的一个数的下标.a[0]初始化最小 ...
- AcWing 895. 最长上升子序列(LIS朴素做法)
题目连接 https://www.acwing.com/problem/content/897/ 思路 因为数据范围很小,所以我们定义f[i]f[i]f[i]表示的是以第i个元素结尾的最长上升子序列的 ...
- ACwing 895 - 最长上升子序列(最长上升子序列模型)
给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少. 输入格式 第一行包含整数N. 第二行包含N个整数,表示完整序列. 输出格式 输出一个整数,表示最大长度. 数据范围 1 ≤ N ≤ ...
- 数字三角形,最长上升子序列,背包模型 AcWing算法提高课 (详解)
目录 数字三角形模型(只能向右和向下或向左和向上) AcWing 1015. 摘花生 AcWing 1018. 最低通行费(曼哈顿距离-向右和向下-求最小值-初始化) AcWing 1027. 方格取 ...
- AcWing 897. 最长公共子序列(LCS朴素版)
题目连接 https://www.acwing.com/problem/content/899/ 思路 我们定义f[i][j]f[i][j]f[i][j]表示的是a串中长度为i和b串长度为j的最长公共 ...
- 最长上升子序列模型 AcWing 1010. 拦截导弹
最长上升子序列模型 AcWing 1010. 拦截导弹 原题链接 AcWing 1010. 拦截导弹 算法标签 DP 线性DP 最长上升子序列 思路 摘自该题解 代码 #include<bits ...
- [AcWing] 1012. 友好城市(C++实现)最长上升子序列模型、较为特殊
[AcWing] 1012. 友好城市(C++实现)最长上升子序列模型 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总 ...
- AcWing 1012. 友好城市(最长上升子序列dp)
如果任意两个城市不会发生交叉,那么两座城市在南北两侧的顺序应该是相同的.若给任意一侧的城市按顺序编号,那么要想不出现交叉的现象在另一侧对应城市的编号顺序一定是单调递增或递减的.如此可得,将某一侧城市按 ...
最新文章
- 微软亚洲研究院副院长刘铁岩:以计算之矛攻新冠之盾
- cghhhhhhhhhhhhhhhhhh
- pip install cryptography error
- Codeforces Round #643 (Div. 2)(AB)
- ubuntu上面svn用merge合并到之前的版本
- 详解--单调队列 经典滑动窗口问题
- gevent版TCP服务器
- 接口规范 10. 并发限制相关接口
- 服务器上安装python anaconda最简明教程
- 计算机文件的存储单位是什么,了解计算机的朋友请看看
- MySQL之MHA集群的详细教程
- 10 - 箱梁网格划分
- 由简入难学习3d机械制图软件顺序?Pro/Engineer 与CREO有何不同。
- 统计学习导论之R语言应用(二):R语言基础
- SyntaxError: invalid character in identifier
- 移动端应用视频小程序加密播放(存档)
- 服务器独享宽带和共享宽带有那些区别
- 小程序入门第二课 — 组件与WXML语法
- Oracle 数据库中的 时间 时区
- Linux——详解进程控制之终止
热门文章
- Vue3和Vue2的区别
- miui 8.5 android,小米5c获MIUI 8.5.3.0系统更新:升级最新安卓7.1
- 八个案例分析为什么英文要比中文在设计中显得高大上?
- 软件测试练手项目,可以写进简历里面的(银行:金融:商城:外卖等等)
- 普通人如何打造自己的被动收入?
- SQL语句 平均分数比较 成绩比较 连接查询
- rxjava:错误处理操作符(2): onErrorReturn 、 onErrorResumeNext 、onExceptionResumeNext
- WIN7下通过命令调用“控制面板项” / RUNDLL32详解 / CPL文件详解
- JQuery 之 阻止事件冒泡
- 《丝绸之路》读后感2800字心得体会