首页 > 其他分享 >最长公共上升子序列

最长公共上升子序列

时间:2022-10-31 23:13:09浏览次数:95  
标签:int cin 最长 print solve 公共 序列 include id

 

 n^3

#include <iostream>
#include <algorithm>
#include<cstring>
#include <vector>
using namespace std; 
 const int N=600;
  int n,m,a[N],b[N],f[N][N];
  int r[N];
  
  void print(int i){
      if(i) print(r[i]),cout<<b[i]<<' ';
      
  }
 void solve(){
     int i,j;
     for(i=1;i<=n;i++)
       for(j=1;j<=m;j++){
           f[i][j]=f[i-1][j];
          if(a[i]==b[j]){
              int id=0;
              for(int k=1;k<j;k++){
                   if(b[j]>b[k]&&f[i-1][k]>f[i-1][id]) 
                    id=k;
              }
            f[i][j]=f[i-1][id]+1; r[j]=id;
        }
      }
    cout<<f[n][m]<<endl;
    int id=0;
    for(i=1;i<=m;i++) 
     if(f[n][i]>=f[n][id]) id=i;
    print(id); 
 }
 signed main(){
     int i;
     cin>>n;
     for(i=1;i<=n;i++) cin>>a[i];
     cin>>m;
     for(i=1;i<=m;i++) cin>>b[i];
     solve();
 }
 

  

 

n^2 ,只求长度

#include <iostream>
#include <algorithm>
#include<cstring>
#include <vector>
using namespace std; 
 const int N=3004;
  int n,m,a[N],b[N],f[N][N];
  
  
 void solve(){
     int i,j;
     for(i=1;i<=n;i++){
     int mx=1;
      for(j=1;j<=m;j++){
          f[i][j]=f[i-1][j];
          if(a[i]==b[j])
              f[i][j]=max(mx,f[i][j]);
          if(a[i]>b[j]) mx=max(mx,f[i-1][j]+1);
      }
    }
      int ans=0;
      for(j=1;j<=m;j++) ans=max(ans,f[n][j]);
    cout<<ans<<endl;
 }
 signed main(){
     int i;
     cin>>n;
     for(i=1;i<=n;i++) cin>>a[i];
     //cin>>m;
     m=n;
     for(i=1;i<=m;i++) cin>>b[i];
     solve();
 }
 

  

 

标签:int,cin,最长,print,solve,公共,序列,include,id
From: https://www.cnblogs.com/towboa/p/16846235.html

相关文章

  • 学习笔记-PHP反序列化
    PHP反序列化相关文章&Source&ReferenceWeb安全|PHP反序列化入门这一篇就够了php反序列化练习题php反序列化知识点总结相关工具php在线反序列化工具PHP......
  • [单片机框架][os层] RTX5 中间件 公共函数
    KeilRTX5是一种免版税、确定性、全功能的实时操作系统,它实现了CMSIS-RTOSAPIv2,这是一种适用于基于Cortex-M处理器的设备的通用RTOS接口。功能包括定期激活定时器功......
  • 力扣409(java&python)-最长回文串(简单)
    题目:给定一个包含大写字母和小写字母的字符串 s ,返回 通过这些字母构造成的最长的回文串 。在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串......
  • java反序列化cc_link_one2
    CC-LINK-one_second前言这条链子其实是上一条链子的另一种走法,在调用危险函数哪里是没有什么变化的整体链子还是尾部没有变化嘛还是InvokerTransformer的transform方法......
  • 序列化与反序列化
    专业解释:序列化:把对象转换为字节序列的过程称为对象的序列化。反序列化:把字节序列恢复为对象的过程称为对象的反序列化。通俗解释:从内存中读取硬盘中的数据过程,叫做序列化......
  • 力扣HOT100算法题5:最长回文字串
    文章目录​​一、题目​​​​二、方法一:解题思路​​​​三、方法一:代码解析​​​​四、方法二:动态规划​​​​五、方法二:代码解析​​一、题目给你一个字符串s,找到s......
  • 如何查看磁盘序列号
    Win+R键运行cmd,进入命令行界面1、diskpart启动diskpart程序2、listdisk查看电脑所有的磁盘信息3、selectdisk0选择第一块硬盘4、detaildisk显示硬盘详细信息5、exi......
  • php反序列化绕过__wakeup(O改为C)
    先说下适用条件:PHP版本:7.0.15-7.0.33,7.1.1-7.1.33,7.2.0-7.2.34,7.3.0-7.3.28,7.4.0-7.4.16,8.0.0-8.0.3。变量的初始化不在__construct里,而是在外面......
  • PHP反序列化字符逃逸学习
    文章目录​​过滤后字符变多​​​​过滤后字符变少​​过滤后字符变多首先给出本地的php代码,很简单不做过多的解释,就是把反序列化后的一个x替换成为两个<?phpfunctionchan......
  • prufer序列
    Cayley定理一棵有标号生成树唯一对应着一个prufer序列。任意一个长度为\(n-2\)、值域为\([1,n]\)的序列也唯一对应着一棵大小为\(n\)的有标号生成树。若一个点......