【动态规划】子序列问题

ops/2024/10/18 16:47:51/

最长上升子序列

题目描述:

 解题思路:

核心思路:

f[i]:表示以第i个数结尾的最大子序列,只需要找到比第i个小的最大子序列再加上1 即可;

----> f[i]=max(f[j]+1,f[i]);

定义 f[i] 表示以第 i 个元素结尾的最长上升子序列的长度,尝试从数组 a 的第一个元素开始,依次计算 f[0], f[1], ..., f[n-1],直到最后一个元素。对于每个 i,都要考虑 a[i] 与它之前的元素 a[0], a[1], ..., a[i-1] 之间的关系。如果 a[i] 大于某个 a[j](其中 j < i),那么 a[i] 可以接在 a[j] 的后面,形成一个更长的上升子序列。因此,我们可以通过遍历 j 来找出以 a[i] 结尾的最长上升子序列的长度。

代码:

核心代码:

 for(int j=0;j<i;j++)
        {
            if(a[j]<a[i])
            {
                f[i]=max(f[j]+1,f[i]);
            }
        }

#include<iostream>
#include<vector>
using namespace std;
const int N=1e4;
int a[N];int main()
{int n;cin>>n;for(int i=0;i<n;i++)cin>>a[i];vector<int>f(n,1);int mx=f[0];for(int i=1;i<n;i++){for(int j=0;j<i;j++){if(a[j]<a[i]){f[i]=max(f[j]+1,f[i]);}}if(f[i]>mx)mx=f[i];}cout<<mx<<endl;
}

最长公共子序列

题目描述:

 解题思路:

f[i][j]:表示在i到j之间的公共子序列的长度;

如果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]);

 代码:

 核心代码:

for(int j=1;j<=m;j++)
        {
            if(a[i-1]==b[j-1])
            {
                f[i][j]=f[i-1][j-1]+1;
            }
            else
            {
                f[i][j]=max(f[i-1][j],f[i][j-1]);
            }
        }

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int N=1e3;
int main()
{int n,m;cin>>n>>m;string a,b;cin>>a;cin>>b;vector<vector<int>> f(n + 1, vector<int>(m + 1, 0));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(a[i-1]==b[j-1]){f[i][j]=f[i-1][j-1]+1;}else{f[i][j]=max(f[i-1][j],f[i][j-1]);}}}cout<<f[n][m]<<endl;
}

后续会对子序列问题继续补充!!


http://www.ppmy.cn/ops/38930.html

相关文章

【网络】什么是NAT技术

在当今互联网的环境中&#xff0c;NAT&#xff08;Network Address Translation&#xff09;技术扮演着至关重要的角色&#xff0c;它是网络通信中的一项核心技术&#xff0c;为我们的网络连接提供了便利、安全性和灵活性。本文将介绍NAT技术&#xff0c;探讨其原理、不同类型以…

代码随想录算法训练营第36期DAY18

DAY18 二叉树的层序遍历 102二叉树的层序遍历 “队列先进先出&#xff0c;符合一层一层遍历的逻辑&#xff0c;而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。” 二叉树层序遍历模版&#xff1a; /** * Definition for a binary tree node. * struct TreeNode { *…

selenium软件测试验证码处理

七、验证码7.1 什么是验证码&#xff1f;一种随机生成信息(文字、数字、图片)7.2 验证码作用防止恶意请求7.3 验证码处理方式1. 去掉验证码(项目在测试环境、公司自己的项目)2. 设置万能验证码(测试环境或线上环境&#xff0c;公司自己项目)3. 使用验证码识别技术 (由于现在的验…

【操作指南】银河麒麟高级服务器操作系统内核升级——基于4.19.90-17升级

1. 升级清单 升级包及依赖包清单如下。 kernel ARM架构 kernel-core-4.19.90-23.18.v2101.ky10.aarch64.rpm kernel-modules-4.19.90-23.18.v2101.ky10.aarch64.rpm kernel-4.19.90-23.18.v2101.ky10.aarch64.rpm kernel-modules-extra-4.19.90-23.18.v2101.ky10.aarch64.r…

QT作业1

1、思维导图 2、 自由发挥应用场景&#xff0c;实现登录界面。 要求&#xff1a;尽量每行代码都有注释。 头文件&#xff1a; #ifndef MUSIC1_H #define MUSIC1_H#include <QWidget> #include <QLineEdit> #include <QPushButton> #include <QIcon>…

怎么理解Mybatis的事务

对于数据库事务&#xff0c;我们都不陌生&#xff0c;数据库的事务&#xff08;Transaction&#xff09;是数据库管理系统执行过程中的一个逻辑单位&#xff0c;也是一个不可分割的工作单位。它包含一个或多个SQL语句&#xff0c;这些语句要么全部执行&#xff0c;要么全部不执…

TrinityCore最新版本master安装@ubuntu22@win10

原名字是&#xff1a;trinitycore最新版本master安装dockerfreebsd15win10 说明一下&#xff0c;原计划是在win10的virtualbox安装FreeBSD&#xff0c;然后在FreeBSD系统安装docker-machine&#xff0c;再安装tinycore-linux&#xff0c;在里面再安装docker&#xff0c;docker…

数据库系统概论第四章 数据库安全性

数据库的特点之一是由数据库管理系统提供统一的数据保护功能来保证数据的安全可靠和正确有效。数据库的数据保护主要包括数据库的安全性和完整性。 文章目录 4.1 数据库安全性概述 4.1.1 数据库的不安全因素 4.1.2 安全标准简介 4.2 数据库安全性控制 事前控制-事中控制-事…