首页 > 其他分享 >线性DP简单总结

线性DP简单总结

时间:2024-01-21 14:59:01浏览次数:36  
标签:总结 max 序列 DP 线性 长度 最长 dp

线性DP简单总结

动态规划原理

可以用动态规划解决的问题,应具备三种条件:

  1. 最优子结构 (由小推大)
  2. 无后效性(由过去推现在)
  3. 子问题重叠(已经求解的子问题不必重复求解)

动态规划构成

“状态” “阶段” “决策” 为动态规划三要素。

最长上升子序列

问题

给定一个长度为 \(n\) 的序列 \(A\),求出一个最长的 \(A\) 的子序列,满足该子序列的后一个元素不小于等于前一个元素。

状态表示

\(dp_i\) 表示以 \(A_i\) 为结尾的最长上升子序列的长度

转移方程

\[f_i=\max \left(f_j+1 \right) \]

目标

\[\max \left(f_i \right) \]

代码

for (int i = 1; i <= n; i++) {
		dp[i] = 1;
		for (int j = 1; j < i; j++) 
			if (a[i] > a[j])
				dp[i] = max(dp[i], dp[j] + 1), ans = max(ans, dp[i]);
	}

最长公共子序列

问题

给定一个长度为 \(n\) 的序列 \(A\) 和一个 长度为 \(m\) 的序列 \(B\),求出一个最长的序列,使得该序列既是 \(A\) 的子序列,也是 \(B\) 的子序列

状态表示

设 \(f_{i,j}\) 表示只考虑 \(A\) 的前 \(i\) 个元素,\(B\) 的前 \(j\) 个元素时的最长公共子序列的长度

转移方程

\[f_{i,j}=\begin{cases}f_{i - 1,j - 1}+1&A_i=B_j\\\max(f_{i - 1,j},f_{i,j - 1})&A_i\ne B_j\end{cases} \]

目标

\[f_{n, m} \]

代码

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

参考资料

动态规划基础 - OI Wiki

标签:总结,max,序列,DP,线性,长度,最长,dp
From: https://www.cnblogs.com/X1aonuo/p/17977850

相关文章

  • 0/1背包简单总结
    0/1背包简单总结问题:\(n\)件物品选择性放入载重为\(C\)的背包。第\(i\)件物品的重量为\(w[i]\),价值为\(v[i]\)。每个物品只有一件,你可以选择不放入背包,或者放入背包。请问该如何选择物品,在能保证物品总重量不超过背包载重的条件时,使物品的价值总和最大。解:设\(dp[i][j]\)表示......
  • 其他背包问题简单总结
    其他背包问题简单总结1.完全背包0/1背包问题:已知有第\(i\)个物品的重量\(w_{i}\),价值\(v_{i}\),以及背包的总容量\(W\)。设DP状态\(f_{i,j}\)为在只能放前\(i\)个物品的情况下,容量为\(j\)的背包所能达到的最大总价值。而完全背包,即是在\(0/1\)背包问题中,将一个物......
  • [低代码平台] 自我总结:帆软▪简道云VS金蝶▪云之家
    云平台▪架构概述云平台架构基本包括以下几个关键组件:前端用户界面:提供一个可视化的、拖拽式的界面,让用户无需编码即可设计应用程序。后端服务:执行业务逻辑、数据处理和集成服务。数据存储和管理:用于存储用户数据和应用数据的数据库系统。API和集成层:使平台能够与外部系统和数......
  • 0-1背包和完全背包,初级理解和总结
    0-1背包就是数组中元素只能取一个,完全背包就是数组中的元素能无限取。最开始接触的就是纯粹的背包问题,就是怎么装是背包价值最大,二维数组,if(j<weight[i])dp[i][j]=dp[i-1][j];elsedp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);一维数组,dp[j......
  • Canal使用和安装总结
    转载请注明出处:1.定义Canal组件是一个基于MySQL数据库增量日志解析,提供增量数据订阅和消费,支持将增量数据投递到下游消费者(如Kafka、RocketMQ等)或者存储(如Elasticsearch、HBase等)的组件。 Canal感知到MySQL数据变动,然后解析变动数据,将变动数据发送到MQ或者同......
  • 线性代数小结
    主要是线性方程组和特征值这两章明白齐次和非齐次解的情况(齐2非3)知道n-r的含义和来历会化行阶梯型矩阵(不要有分数,箪食壶浆以迎王师)明白解的结构,同常微分一样。给你两个非齐次特解,你要立马能写出齐次的解,特征值这一章矩阵a的行列式和迹跟特征值的关系,不是对角线元素之积特......
  • 今日总结
    点击【左上角】的【File】,选择【Settings...】 选择【Plugins】在输入框中输入【Scala】等待几秒后,看到显示【Scala】点击【Install】当显示为【Installed】代表安装成功了。 步骤二、maven引包打开【pom.xml】 初始状态: 输入以下编码内容:<!--基础配置--><......
  • Woodpecker CI 设计分析|一个 Go 编写的开源持续集成引擎
    一、前言大家好,这里是白泽。随着Go语言在云原生领域大放异彩,开发者逐渐将目光转移到了这门语言上,而容器则是云原生时代最核心的载体。《WoodpeckerCI设计分析》系列文章将分析开源CI引擎Woodpecker的架构设计,探究Go协程是如何支持由Workflow定义的大量Task的频繁创建......
  • 2020年终总结(技术篇),重整心情、扬帆起航
    大二上篇突如其来的疫情打破了以往的平静,哪都不能去只能呆在家里,因此我收获了有史以来最长的一个寒假,在宅在家的这4个月里面,我独立做了一个大项目嘿嘿,还有一个烂大街的后台管理系统,虽然很普通但是确实我一个个敲出来的东西,很有成就感,期间历时一个多月,每天除了和家人的交际,那段时间......
  • mysql中的各种索引大总结
    文章目录为啥不用二叉搜索树?为啥不用平衡二叉(avl)树?为啥不用b-树?为啥用b+树?(重点)索引聚簇索引聚簇索引的局限聚集的数据的优点非聚簇索引介绍组合索引覆盖索引前缀索引前缀索引选择算法全文索引hash索引b-tree索引自适应哈希索引小咸鱼的技术窝b-tree索引使用的是b+树的数据结构,树......