【动态规划】子序列问题

devtools/2024/9/22 13:10:55/

最长上升子序列

题目描述:

 解题思路:

核心思路:

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/devtools/39165.html

相关文章

QT:QT窗口(二)

文章目录 浮动窗口浮动窗口的构建设置停靠的位置设置窗口只能停靠在上下 对话框对话框介绍通过一个按钮来创建一个对话框 自定义对话框纯代码实现图形化界面实现 对话框分类模态对话框 QT内置对话框QMessageBox 文件对话框 浮动窗口 在QT中&#xff0c;浮动窗口也叫做是铆接部…

华大基因CEPO-尹烨说学习与生活

怎么去面对生活和事业中的不确定性&#xff1f; 尹烨说&#xff0c;人类能够对抗不确定性的唯一的办法是&#xff0c;去让自己充电。 主持人问他&#xff0c;“和你同年的也有很多人&#xff0c;他们也可能也在学习&#xff0c;你怎么就能够脱颖而出呢&#xff1f;” 他说&am…

【数据库原理及应用】期末复习汇总高校期末真题试卷08

试卷 一、选择题(每题 2 分&#xff0c;共 30 分)    1. ___ ____是长期存储在计算机内的有组织,可共享的数据集合. A.数据库管理系统 B.数据库系统 C.数据库 D.文件组织 2. 数据库类型是按照 来划分…

IF:23.2|从实验室到田间,微生物干预提高植物抗逆

期刊&#xff1a;Nature Food 影响因子&#xff1a;23.2 发表时间&#xff1a;2023年10月 本研究介绍了一种名为SynCom的微生物组合&#xff0c;该组合Rhodococcus erythropolis和Pseudomonas aeruginosa两种微生物组成。这两种微生物能够帮助水稻抵抗铝毒害和磷缺乏&…

我们应该如何做参与式观察

记得多年以前&#xff0c;有个朋友问我&#xff1a;对于做观察&#xff0c;有人通过教授绘画技巧来教人如何做观察。你们研究员又不会画画&#xff0c;你们如何让人相信你们更会观察呢&#xff1f;坦率说&#xff0c;当时我被问住了&#xff0c;因为我从来没有进行过这样的对比…

15:00面试,15:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到3月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

vue3 - 150

目录 vue优势使用方式编写vue代码指令响应式数据其他 vue优势 功能全面生态好&#xff0c;语法简洁效率高&#xff0c;免去 DOM 操作苦&#xff0c;开发重任一肩挑&#xff01; 使用方式 1.通过cdn引入来将 Vue 应用到整个页面 2.或通过官方脚手架 create-vue来创建完整的v…

move_base全局路径规划

move_base是ROS&#xff08;Robot Operating System&#xff09;中的一个核心导航节点&#xff0c;它负责生成全局路径规划和局部路径规划&#xff0c;以实现机器人的自主导航。move_base使用了一些关键的ROS包来实现其功能&#xff0c;包括navfn、costmap、base_local_planner…