首页 > 其他分享 >最长上升子序列【模板】

最长上升子序列【模板】

时间:2022-08-28 13:44:07浏览次数:84  
标签:int MAX 序列 上升 最长 模板 define

 

P1439 【模板】最长公共子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • n^2的最长上升子序列解法
#include<iostream>
using namespace std;
int dp[1001][1001],a1[2001],a2[2001],n,m;
int main()
{
   cin>>n>>m;
   for(int i=1;i<=n;i++)scanf("%d",&a1[i]);
   for(int i=1;i<=m;i++)scanf("%d",&a2[i]);
   for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
     {
     	dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
     	if(a1[i]==a2[j])
     	dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
     }
   cout<<dp[n][m];
}
  • 本题需要降低到nlogn,因为两个序列里的元素都是相同数的排列,所以可以用最长上升子序列求(nlogn)
  • 把a数组的数映射成1到n,然后队b数组取了映射的结果求最长上升子序列就行
  • 求最长上升子序列只需把新迭代到的数找到对应位置插入,该位置为答案序列(也就是当前最优的上升子序列)中大于或等于这个新数的最小的位置(第一个),用lower_bound直接求出
#include <bits/stdc++.h>
using namespace std;
#define N 1e5
#define INF 2e9
#define MAX 1000000
// https://www.luogu.com.cn/problem/P1439
int n;
int mapp[MAX], ans[MAX];
int main()
{
    cin >> n;
    for (int i = 1, t; i <= n; i++)
    {
        scanf("%d", &t);
        mapp[t] = i;
    }
    memset(ans, 0x3f3f3f, sizeof(ans));
    for (int i = 1, t; i <= n; i++)
    {
        scanf("%d", &t);
        t = mapp[t];
        *lower_bound(ans + 1, ans + n + 1, t) = t;
    }
    printf("%d", lower_bound(ans + 1, ans + n + 1, ans[0]) - ans - 1);
}

 

标签:int,MAX,序列,上升,最长,模板,define
From: https://www.cnblogs.com/Wang-Xianyi/p/16632649.html

相关文章

  • C++ 之函数模板
    C++之函数模板函数的参数类型不确定,这样就可以使用泛型。//类型参数化C++中称之为泛型编程--模板技术template<classT>//告诉编译器,下面如果出现T不要报错,T是......
  • 简单动态变量文本模板
    TemplateUtils工具类importlombok.experimental.UtilityClass;importorg.springframework.cglib.beans.BeanMap;importjava.util.*;importjava.util.regex.Matche......
  • Django入门到放弃之模板及标签
    1.django模板使用的两种方式#方式一 returnrender(request,'time.html',context={'current_date':str(now),'title':'lqzNB'})#方式二(页面静态化,提高网站并发量)......
  • 序列化和反序列化
    序列化方式说明二进制序列化器:序列化结果人看不懂,但是序列化后体积小soap序列化器:人能看懂,没啥阅读体验,文件体积比较大xml序列化器:可阅读性好,体积中等序列化为......
  • 序列化与反序列化
    参考视频:153、序列化和反序列化哔哩哔哩bilibili序列化版本说明参考地址:(18条消息)序列化版本号(serialVersionUID)是做什么用的鲱鱼罐头配白花蛇草水的博客-CSDN博客seria......
  • 可变参数模板
    获取参数个数template<class...T>voidf(T...args){cout<<sizeof...(args)<<endl;//打印变参的个数}f();//0f(1,2);//2f(1,2.5,"......
  • 动态规划——leetcode5、最长回文子串
    1、题目描述:2、解题方法:动态规划动态规划解题步骤:1、确定状态最后一步:如果s[i,...,j]是回文子串,那么需要满足两个条件①s[i......
  • smarty模板引擎中变量及变量修饰器用法实例
    smarty模板引擎中变量及变量修饰器用法实例_php实例_脚本之家 https://www.jb51.net/article/60243.htm本文实例讲述了smarty变量及变量修饰器的应用。分享给大家供大家......
  • 最长出现偶数次字符子串
    给定一个字符串求子串,使得子串中每个字符出现偶数次,例如S="baaadadd",满足条件的子串有"aa","adad","aaadad",其中最长的是6,输出6这道题一看会想使用滑动窗口解决,但是......
  • 牛客-最长和谐连续子序列
    时间限制:C/C++1秒,其他语言2秒空间限制:C/C++256M,其他语言512M和谐连续序列是指一个连续序列中元素的最大值和最小值之间的差值正好是1。现在,给定一个整数数组,你需要......