掘友等级
获得徽章 9
#每日一题#
并查集:用于处理一些不交集(一系列没有重复元素的集合)的合并及查询问题
1.查询:查询某个元素属于哪个集合,通常是返回集合内的一个“代表元素”。
2.合并:将把两个不相交的集合合并为一个集合。
#每日一题# 差分法
用于解决对一个序列某些不确定的区间进行多次加减操作;
差分可以简单的看成序列中每个元素与其前一个元素的差。
一般步骤:
1.构造差分数组
2.进行加减操作
3.差分还原(前缀和)
#每日一题# 动态规划
第一步,明确两点,「状态」和「选择」。
第二步,定义状态,要明确 dp 数组的定义。
第三步,状态转移方程,根据「选择」(分类讨论),思考状态转移的逻辑。
最后,把伪码翻译成代码,处理一些边界情况。
#每日一题# 最长公共子序列
问题描述:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。如果不存在 公共子序列 ,返回 0 。
#每日一题#
最长递增子序列
子问题最优解推出大问题最优解。
#每日一题#
无后效性
• 为了保证计算子问题能够按照顺序、不重复地进行,动态规划要求已经求解的子问题不受后续阶段的影响。这个条件也被叫做「无后效性」。
• 换言之,动态规划对状态空间的遍历构成一张有向无环图
○ 遍历就是该有向无环图的一个拓扑序
○ 有向无环图中的节点对应问题中的「状态」
○ 图中的边则对应状态之间的「转移」
○ 转移的选取就是动态规划中的「决策」
• 当前状态记录了历史信息,一旦当前状态确定,就不会再改变,且未来决策只能在已有一个或若干状态的基础上进行,历史信息只能通过已有状态来影响未来的决策。
下一页