摘要:
状态压缩DP [TOC] 1.状态压缩的定义 状态压缩的定义:我们知道任何一个二进制都可以对应唯一的十进制数,反过来也成立。 所以我们可以用一个数来代替一组数从而降低维数 。这种解题手段我们叫做状态压缩。 举个例子:如果数组中的某一行全是0或全是1,例如000,001,我们可以将000用0表示,00 阅读全文
摘要:
树形dp [TOC] 树形dp的性质:没有环,dfs不会重复,而且具有明显而又严格的层数关系。 判断一道题是否是树形dp:首先判断数据结构是否是一棵树,然后是否符合动态规划的要求。如果都符合,那么是一道树形dp的问题。我们需要通过下面几个步骤来解题。 1.建树 建树过程中,我们需要通过数据量和题目的 阅读全文
摘要:
[toc] 定义:区间dp就是在区间上进行动态规划,求解一段区间上的最优解。其主要思想就是现在小区间进行dp得到最优解,然后再利用小区间的最优解结合并大区间的最优解。 区间dp经典问题: 1.石子合并问题 有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的 阅读全文
摘要:
拦截导弹(acwing.1010) 【题意】:某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦 阅读全文
摘要:
背包九讲 [TOC] 第一讲 01背包 01背包是每种武平只能选择一次,计算出最大价值的问题,先上01背包的状态转移方程: $$ f[i][j] = max\{f[i 1][j], f[i 1][j w[i]] + v[i]\} $$ 下面来解释一下这个状态转移方程: 这个方程非常重要,基本上所有跟 阅读全文
摘要:
[toc] 注:dp可能并不是求解该这些问题的最优算法,这里只是做一个dp 算法的简介。 概念 定义:假设现有一个 string = 最长连续子串:要求在原序列中连续,比如 str = 、`fghijklm`都是valid substring 最长连续子序列:相对顺序在原序列中不变即可;比如 str 阅读全文
摘要:
线段树及其应用 [TOC] 线段树的几个基础操作:建树,单点查询,单点修改,区间查询,区间修改。其代码的主要思想为二分。参考博客: "https://blog.csdn.net/qq_39826163/article/details/81436440" 数据结构: 1.建树 建树的过程分为三步:1: 阅读全文
摘要:
单调栈、单调队列及优先队列 [TOC] 1.单调队列 单调队列的描述:指队列中元素之间关系具有单调性,而且队首和队尾都可以出队,但是只有队尾可以进行入队操作。 其重要作用是找到前n个后者后n个数的最值。 其具体操作是:假设单调队列是单调递减队列,假设在插入元素v时,将队列尾部的元素同v比较,如果队列 阅读全文
摘要:
并查集 并查集是数据结构中的一个重要算法,可以管理元素分组,并查集由三部分构成:初始化,找父节点,合并结点,直接来看并查集的模板: 阅读全文
摘要:
st表 ST表类似树状数组,线段树这两种算法,是一种用于解决RMQ(Range Minimum/Maximum Query,即区间最值查询)问题的离线算法。 st表的预处理时间复杂度为$O(logn)$,查询为$O(1)$,而线段树的查询为$O(logn)$。 我们定义:$dp[i][j]$为 i 阅读全文