首页 > 其他分享 >P1439 【模板】最长公共子序列

P1439 【模板】最长公共子序列

时间:2024-10-19 10:11:24浏览次数:7  
标签:ma int mid len P1439 序列 include 模板

首先考虑动态规划,a[i]==b[j],f[i][j]=f[i-1][j-1]+1,否则 f[i][j]=max(f[i-1][j],f[i][j-1]);然后看了一眼数据范围,被卡的实施的,然后考虑优化,看到题目是一个排列于是不要考虑重复的问题,于是只在b里看,如果b[i]在a中的位置,小于我们维护的最长的就不行,否则的话直接加入我们维护的最长子序列的长度。就像贪心+二分找最长上升子序列一样。

点击查看代码
#include <iostream>
#include <stack>
#include <cmath>
#include <algorithm>
#include <set>
#include <vector>
#include <climits>
#include <string.h>
#include <map>
#include <queue>
#include <list>
#include <cmath>
#include <iomanip> 
#define int long long 
#define ios ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define lc u<<1
#define rc u<<1|1
#define gcd __gcd
#define double long double
#define endl "\n"
#define INF LLONG_MAX
#define mod  1000000007
#define N 100005
const double PI = 3.14159265358979323846;
using namespace std;
int n, a[N], b[N],f[N],ma[N];//ma数组记录每个元素在a中的位置
signed main()
{
    ios;
    cin >> n;
    for (int i = 1; i <= n; i++)
    {
        cin >> a[i];
        ma[a[i]] = i;
    }
    for (int i = 1; i <= n; i++)
    {
        cin >> b[i];
        f[i] = INF;
    }
    int len = 0;//当前最长子序列的长度
    f[0] = 0;//开始状态
    for (int i = 1; i <= n; i++)
    {
        int l = 0, r = len, mid;
        if (ma[b[i]] > f[len])f[++len] = ma[b[i]];//出现的位置在后面
        else
        {
            while (l < r)//找到第一个大于等于ma[b[i]]的位置
            {
                mid = l + r >> 1;
                if (f[mid] > ma[b[i]]) r = mid;
                else l = mid + 1;
            }
        }
        f[l] = min(ma[b[i]], f[l]);
    }
    cout << len << endl;
    return 0;
}

标签:ma,int,mid,len,P1439,序列,include,模板
From: https://www.cnblogs.com/youyong1/p/18475530

相关文章

  • 逻辑图PPT模板
    86页精美逻辑图PPT模板                                               ......
  • java_day16_IO、序列化
    一、IO流IO流划分IO流【输入输出流】:按照流向划分:输入流:外部数据->java程序输出流:java程序->外部数据按照数据类型划分【根据使用记事本打开是否能够看懂来决定】字节流【万能流】:字节输入流:InputStream【抽象类】-......
  • 代码随想录算法训练营 | 115.不同的子序列,583. 两个字符串的删除操作,72. 编辑距离
    115.不同的子序列题目链接:115.不同的子序列文档讲解︰代码随想录(programmercarl.com)视频讲解︰不同的子序列日期:2024-10-18想法:dp[i][j]表示以s[i-1],t[j-1]结尾的s,t自学列中满足s的子序列为t的个数,如果s[i-1],t[j-1]相等,那么个数应该跟双方上一个结尾状态dp[i-1][j-......
  • 泛型、序列化和反序列化
    一、泛型1.泛型概念①Java泛型(Generics) 是JDK5中引入的一个新特性。③定义类或者接口时可以使用泛型,通过继承或者实现,减少了冗余代码,提高了代码的复用性。④Java不能创建具体类型的泛型数组List[]li2=newArrayList[];类型形参:定义参数时不指定具体的类型,使......
  • 模板信息渲染和正则表达式的运用
    业务后台配置模板消息配置变量名及相关数据,用来进行查询配置模板信息,嵌入变量名前台渲染通过接口获取模板信息将模板消息中的变量替换成对应的数据模板信息:'今天到场一共${aaa}人,其中男${bbb}人,女${ccc}人'相关信息:{describe:'今天到场一共${aaa}人,其中男${bbb......
  • 逆向 | shellcode注入模板
    逆向|shellcode注入模板继续写书里的示例代码。#include<stdio.h>#include<windows.h>typedefint(WINAPI*PMESSAGEBOXA)(HWNDhWnd,LPCSTRlpText,LPCSTRlpCaption,UINTuType);typedefFARPROC(WINAPI*PGETPROCADDRESS)(HMODULEhModule,LPCSTRlpProcName);ty......
  • 秘制小模板
    最小生成树PrimCode#include<iostream>#include<queue>usingnamespacestd;constintkMaxN=1e5+1;intn,m;vector<pair<int,int>>g[kMaxN];structNode{intu,w;Node(inta,intb){u=a,w=b;}friendbo......
  • 【模板】模意义下的乘法逆元 2
    原题链接\(通过小学就知道的小费马定理我们可以得知\)\(inv(a)=a^(mod-2)(modp)\)\(我们将其前后通分然后把分子的和加起来最后通过所有数的乘积的逆元进行计算即可\)\(唯一恶心的点就是卡取消同步流\)\(code:\)点击查看代码#include<bits/stdc++.h>#defineintlong......
  • Zabbix模板数据存储在哪里?
    Zabbix的模板数据存储在数据库的哪一个表里面?以MySQL数据库为例,在数据库zabbix中,其实模板数据存储在hosts这个表里面,而不是存在hosts_templates表里面。很多人一看到templates关键字,容易先入为主的以为这个表会存储模板的相关数据。但是实际上,hosts_templates表用于存储主机和模板......
  • 网站如何修改后台代码?模板网站怎么修改?
    修改网站后台代码通常涉及以下几个步骤,具体操作可能会因网站的技术栈和架构而有所不同。以下是一般流程:1.备份现有代码重要:在进行任何修改之前,务必备份现有的代码和数据库。这可以在出现问题时帮助你快速恢复。2.确定修改需求明确你需要对后台代码进行哪些具体的修改,比如......