正题

题目链接:http://www.joyoi.cn/problem/tyvj-1071


题目大意

求两个序列的最长公共上升子序列。


code

我们先回顾一下LIS和LCS
LIS:

fi=max{fj+1}(j<i,aj<ai)fi=max{fj+1}(j<i,aj<ai)

f_i=max\{f_j+1\}(j
LCS:

fi,j=max⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪fi−1,jfi,j−1fi−1,j−1+1(ai=bi)⎫⎭⎬⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪fi,j=max{fi−1,jfi,j−1fi−1,j−1+1(ai=bi)}

f_{i,j}=max\begin{Bmatrix}\\ f_{i-1,j}\\ f_{i,j-1}\\ f_{i-1,j-1}+1 (a_i=b_i)\\\\\end{Bmatrix}
我们将其融合一下就变成了

fi,j=max{fi−1,k}+1(k<j,bk<ai)fi,j=max{fi−1,k}+1(k<j,bk<ai)

f_{i,j}=max\{f_{i-1,k}\}+1(k
于是我们就得到了一个TLE方程,然后因为每次k的范围只多了一个选项,于是我们就每次用变量计算最大就好了,于是 O(n2)O(n2)O(n^2)的算法就出来了。


code

#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,a[3001],b[3001],f[3001][3001],val;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(int i=1;i<=n;i++)
        scanf("%d",&b[i]);
    for(int i=1;i<=n;i++)
    {        val=0;//统计答案的变量
        for(int j=1;j<=n;j++)
        {            if(a[i]==b[j]) f[i][j]=val+1;
            else f[i][j]=f[i-1][j];//动态转移
            if(b[j]<a[i]) val=max(val,f[i-1][j]);//更新最大值
        }
    }
    val=0;
    for(int i=1;i<=n;i++) val=max(val,f[n][i]);
    printf("%d",val);
}

JoyOI(TYVJ)1071-LCIS【线性dp,LIS,LCS】相关推荐

  1. 蓝桥 蓝桥骑士 线性dp lis

    题目描述 小明是蓝桥王国的骑士,他喜欢不断突破自我. 这天蓝桥国王给他安排了 N 个对手,他们的战力值分别为 a1​,a2​,...,an​,且按顺序阻挡在小明的前方.对于这些对手小明可以选择挑战,也 ...

  2. tyvj 1067 合唱队形 dp LIS

    P1067 合唱队形 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 NOIP2004 提高组 第三道 描述 N位同学站成一排,音乐老师要请其中的(N-K)位 ...

  3. BUCTOJ周赛(5)问题 E: 数学(线性DP+LCS)

    题目链接 (题目好像现时,不过可以参考着学一下这种类型) 这个题目是正常的线性动态规划问题,对于这个问题就是公共子序列和(LCS)的变形题目,所以就相当于是对线性dp的补充,在这再详细的解释一下动态方 ...

  4. 动态规划 —— 线性 DP

    [概述] 线性动态规划,是较常见的一类动态规划问题,其是在线性结构上进行状态转移,这类问题不像背包问题.区间DP等有固定的模板. 线性动态规划的目标函数为特定变量的线性函数,约束是这些变量的线性不等式 ...

  5. 0x51.动态规划 - 线性DP(习题详解 × 10)

    目录 0x51.动态规划 - 线性DP 0x51.1 LIS问题 Problem A. 登山 (最长下降子序列) Problem B. 友好城市(思维) Problem C. 最大上升子序列和 0x5 ...

  6. POJ3666 线性dp+维度优化

    POJ3666 线性dp+维度优化 题面 POJ3666 题面 思路 首先是重要的归纳法寻求思路的思想,在满足S最小化的前提下,假设存在一种构造前k位序列B的方案,即已经构造B1B2⋯BkB_1B_2 ...

  7. 动态规划之线性DP题集

    动态规划之线性DP 文章目录 动态规划之线性DP (一)LIS问题 最长上升子序列 (朴素动规) (二分+贪心+动规) 最大子序和 (动规) (贪心) 最长连续递增序列 (动规) (双指针) 俄罗斯套 ...

  8. UVA11584 划分成回文串 Partitioning by Palindromes(线性DP划分+DP判断回文串)

    整理的算法模板合集: ACM模板 依旧是线性DP 我们使用闫氏DP分析法 总体DP转移的时间复杂度为O(n2)O(n^2)O(n2). 但是这里牵扯到判断 i\tt ii 到 j\tt jj 是否为回 ...

  9. 洛谷P2401 不等数列(线性DP)

    本题使用的是线性DP.就是DP数组难以思考,这里我直接给出 dp[i][j]:表示 1 ~ i 这 i 个数 , 其中j 个 " < " 有几种方法 假设我们已经把 n - ...

最新文章

  1. r型聚类典型指标_文献解读 | 缺陷和非缺陷型精神分裂症脑网络功能紊乱的共性和异性...
  2. C++中数字和字符串类型的转换
  3. LeetCode--11_974_Subarray_Sums_Divisible_by_K
  4. Android 接入baceBook
  5. 红外测距模块工作原理_共享单车里的通讯模块,工作原理是啥呢?
  6. hdu 4143 A Simple Problem 数论
  7. python编程注释_自学python编程笔记之:python的注释
  8. 34tomcat设置默认页面
  9. Golang面试题解析(五)
  10. 有时候还逃课的视频转换
  11. java组合与继承始示例_排列组合:用公式示例解释的差异
  12. 无重复字符串的最长子串
  13. 4j设置文件保存天数_文件备份很麻烦,各种工作不知道怎么选择,容器时代的备份方案!...
  14. python编程入门到实践笔记-python基础(《Python编程:从入门到实践》读书笔记)...
  15. vim下如何去掉windows编辑的文件中的^M
  16. JSP变量和方法声明
  17. 【hyddd驱动开发学习】DDK与WDK
  18. oracle中控制字段不为null
  19. 送你一份万字机器学习资料
  20. 中国计算机学会 (China Computer Federation,CCF) 推荐中文科技期刊目录 - 2019

热门文章

  1. linux 修改默认脚本,linux环境初始脚本
  2. c++的STL中的map(哈希表)与unordered_map
  3. leetcode54:螺旋矩阵
  4. 计算机网络:如何传输一条数据(详解)
  5. C++ 学习之旅(5)——设置Setup文件目录
  6. css3边框交替动画_用css3实现惊艳面试官的背景即背景动画(高级附源码)
  7. rust火箭基地主楼开启方法_Rust 为什么能成为 Stack Overflow 最受欢迎的语言?
  8. [MyBatisPlus]乐观锁和悲观锁
  9. [PAT乙级]1018 锤子剪刀布
  10. 2018 蓝桥杯省赛 A 组模拟赛(一)数列求值+推导