1759:最长上升子序列

题目:

总时间限制:
2000ms
内存限制:
65536kB
描述
一个数的序列bi,当b1 < b2 < ... < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, ..., aN),我们可以得到一些上升的子序列(ai1, ai2, ..., aiK),这里1 <= i1 < i2 < ... < iK <= N。比如,对于序列(1, 7, 3, 5, 9, 4, 8),有它的一些上升子序列,如(1, 7), (3, 4, 8)等等。这些子序列中最长的长度是4,比如子序列(1, 3, 5, 8).

你的任务,就是对于给定的序列,求出最长上升子序列的长度。

输入
输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。
输出
最长上升子序列的长度。
样例输入
7
1 7 3 5 9 4 8
样例输出
               4
下面放一下ac代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll maxn=+;
ll f[maxn];//用来递推的数组
ll a[maxn];//存储输入数据 int main()
{
ll n;
cin>>n;
for(ll i=;i<=n;i++)
{
scanf("%lld",&a[i]);//输入数据
f[i]=;//顺便为f数组赋初值
/*
f数组的意义是以a[i]结尾的序列能拥有的最大长度
*/
} for(ll i=;i<=n;i++)//i=1时f[1]肯定等于1,所以从2开始
for(ll j=;j<=i-;j++)//j代表枚举f[i]前面的所有可能
{
if(a[i]>a[j])//如果可以加在它后面,记住这里的子序列是可以间断的
f[i]=max(f[i],f[j]+);
}
ll ans=f[];//为ans初定义
for(ll i=;i<=n;i++)//这里的意思是找出f[i=1~n]的最大值
if(f[i]>ans)
ans=f[i];
cout<<ans<<endl;
}

点击打开折叠代码

然后开始解释一下这道题

我们建立一个数组f[maxn],

f数组的意义是以a[i]结尾的序列能拥有的最大上升长度

毫无疑问f[1]始终=1,然后我们对其他f[i]也都赋初始值为1,因为,如果f[i]就只包括a[i]一个的话长度就是1呀

然后核心是状态转移方程

 if(a[i]>a[j])//如果可以加在它后面,记住这里的子序列是可以间断的
                f[i]=max(f[i],f[j]+1);
先说明j=1~i-1,因为a[i]只能拼接在它前面的序列嘛,所以j最大为i-1
解释一下这段代码:
if(a[i]>a[j])就是说可以拼接,因为符合上升条件
然后f[i]=max(f[i],f[j]+1);这里这段语句可能会执行几次,所以有f[i]=max(f[i],....)这样的东西,就是新的自己和旧的自己比较的意思,我们平时用的a=a+1,也是这样,两个a不一样,a=a+1这个栗子是教练教我的,讲的真好
然后f[i]=max(f[i],f[j]+1)的意思就是在前面已经判断了可以拼接的基础上,如果加在前面的f[j]序列上更长的话就f[i]=f[j]+1(+1的意思是相对于前面的f[j]长度又多了一个,也就是多了a[i]),否则就f[i]=f[i]不变

推荐一道类似的题目:

最大子段和(洛谷P1115,动态规划递推)


最长上升子序列(动态规划递推,LIS)的更多相关文章

  1. 最大子段和(洛谷P1115,动态规划递推)

    洛谷题目链接 题目赋值出来格式有问题,所以我就只放题目链接了 下面为ac代码 #include<bits/stdc++.h> #define ll long long using name ...

  2. 九度OJ 1533 最长上升子序列 -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1533 题目描述: 给定一个整型数组, 求这个数组的最长严格递增子序列的长度. 譬如序列1 2 2 4 3 的最长严 ...

  3. 300. Longest Increasing Subsequence(LIS最长递增子序列 动态规划)

    Given an unsorted array of integers, find the length of longest increasing subsequence. For example, ...

  4. 每日一题 LeetCode 491. 递增子序列 【递推】【递增子序列】【动态规划】

    题目链接 https://leetcode-cn.com/problems/increasing-subsequences/ 题目说明 题解 主要方法:递推:动态规划 解释说明: 数据表示:观察数据范 ...

  5. 【ACM】最长公共子序列 - 动态规划

    最长公共子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列.tip:最长公共子序列也称作最 ...

  6. bzoj 3173 [Tjoi2013]最长上升子序列 (treap模拟+lis)

    [Tjoi2013]最长上升子序列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2213  Solved: 1119[Submit][Status] ...

  7. C++求解汉字字符串的最长公共子序列 动态规划

        近期,我在网上看了一些动态规划求字符串最长公共子序列的代码.可是无一例外都是处理英文字符串,当处理汉字字符串时.常常会出现乱码或者不对的情况. 我对代码进行了改动.使用wchar_t类型存储字 ...

  8. [LeetCode] 300. 最长上升子序列 ☆☆☆(动态规划 二分)

    https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/dong-tai-gui-hua-she-ji-fan ...

  9. BZOJ3173:[TJOI2013]最长上升子序列 & HDU3564:Another LIS——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3173 http://acm.hdu.edu.cn/showproblem.php?pid=3564 ...

随机推荐

  1. 利用函数计算构建微信小程序的Server端

    10分钟上线 - 利用函数计算构建微信小程序的Server端-博客-云栖社区-阿里云 https://yq.aliyun.com/articles/435430 函数计算  读写 oss import ...

  2. the “identity” of an object

    2. Built-in Functions — Python 3.6.5 documentation https://docs.python.org/3.6/library/functions.htm ...

  3. HTTP要点概述:十,内容协商

    一,内容协商(Content Negotiation) 同一个Web网站可能存在很多份相同内容的页面,比如英文版和中文版的Web页面,它们内容上相同,但是使用语言不同.比如大家进入英文版的google ...

  4. Vijos 1523 贪吃的九头龙 【树形DP】

    贪吃的九头龙 背景 安徽省芜湖市第二十七中学测试题 NOI 2002 贪吃的九头龙(dragon) Description:OfficialData:OfficialProgram:Converted ...

  5. git ignore的一些技巧

    当想要ignore的部分已经纳入版本控制的时候,可以使用 git rm --cache -rf cache 来强制ignore

  6. SIM卡APDU指令【转】

    本文转载自:http://blog.csdn.net/hlx156/article/details/54136756 一个APDU可以是一个命令,也可以是命令的响应. 命令APDU的一般格式: CLA ...

  7. bzoj5311: 贞鱼

    还是年轻啊算的时候少乘一个4000被卡二分上界了...%%%%bright教我超级快速读D飞bzoj垃圾卡常数据 我们容易写出这样的DP方程:f[i][j]=f[k][j-1]+val(k+1,j) ...

  8. ZOJ3962 2017 E.Seven Segment Display

    数码管从某个状态顺序转移N个状态 计算总共有多少个数码管被点亮 N<=10^9 观察数码管的变化规律,有明显的周期和重复,利用这个性质,计算相对于初始状态,某一位上的某个状态重复了多少次,就可以 ...

  9. 前端性能调优Gzip Filter

    转自:https://blog.csdn.net/zxk15982106569/article/details/18922613 客户端向web服务器端发出了请求后,通常情况下服务器端会将页面文件和其 ...

  10. 昆石VOS3000_2.1.3.2完整安装包及安装脚本

    安装包下载地址:http://www.51voip.org/post/55.html 安装教程: 上传安装包 核实 关闭selinux 是否关闭 /usr/sbin/sestatus -v cd /r ...