- 博客(7)
- 收藏
- 关注
原创 拓扑排序介绍及其应用
和。在DAG)中,一个点是多少弧的弧头称为,是多少弧的弧尾是。102最后,被删除的点的先后顺序就是这个图的拓扑序。4→3→6→5→1→2下面附上一般拓扑排序的部分代码其中ini用来存储入度,goi用来存储出度。
2023-01-19 14:49:06
666
3
原创 List动态规划
个物品有没有被选中,如果能被选中,则是第一个状态转移方程;如果不能被选中,则是第二个状态转移方程,因为本题需要对一对元素进行升序排列,且物品之间顺序可以调换,我们不妨。)类型的题目中,有一类题要求我们对数列进行。分析完题目,我们来处理一些具体的代码写法。,例如求最长不下降子序列,属于比较基础的。的最长严格上升子序列即可。,因为需要严格的单调递增。,排好序后,我们只需求。
2022-12-09 12:51:29
190
3
原创 线段树(1)
在某些题目中,要求我们对数列的某些区间进行操作,例如求区间和或者区间内每个数加减某个数。一般来说,我们求区间和一般采用前缀和,时间复杂度是O(1)O(1)O(1)。而修改区间只能暴力修改,时间复杂度是O(n)O(n)O(n),当我们同时需要做这两件事的时候,每修改一次区间,前缀和也要随之改变,时间复杂度会变成O(n)O(n)O(n)。所以我们引入线段树这种数据结构来帮助我们对区间进行快速操作。 先看一道模板题:洛谷P3327【模板】线段树1首先我们要了解线段树的结构,线段树一定是一颗二叉树,每个结点代表了某
2022-12-07 23:08:19
177
原创 由一道数论题引出的互素相关结论
昨天看到了这么一道数论题,题目大意如下:输入三个整数A,B,C,试判断gcd(AB−1,AC−1)gcd(A^B-1,A^C-1)gcd(AB−1,AC−1)是否为111,其中1
2022-12-06 11:54:38
317
2
原创 动态规划(DP)方法:悬线法
在动态规划问题中,有一类问题要求大矩阵的最大或最小子矩阵,这类问题往往可以采用悬线法,下面由一道例题来引入此法。 洛谷P1169[ZJOI2007]棋盘制作如果直接暴力枚举此题,时间复杂度会较大,一般情况下都会想到利用DP解题,但难以入手,我们不妨分析下面一个样例。 00110010011111101100 \begin{matrix} 0&0&1&1&0& \\0&1&0&0&1\\1&1&1&1&1\\0&1&1&0&0 \end{matrix} 00100111101110100110 在初
2022-12-05 21:15:23
365
2
原创 树形DP(1)
树形DP也即在树上做DP,而遍历一颗树往往需要DFS(深度优先搜索)算法,所以树形DP往往是DP和DFS的结合。 先引入一道例题 没有上司的舞会 我们把题目分为3个模块:构造树,遍历树,DP这里我们引入一个图论中的算法,链式前向星算法,这个算法的作用是用父结点检索它的所有子结点。 例:假设结点的序数就是权值,父结点111具有2342 3 4234三个子节点,那么我们先确立以111为起点,222为终点的一条有向边1→21\rightarrow21→2,并把这条边的序号记为1,我们记first[1]first[
2022-12-04 15:20:45
207
2
原创 洛谷P1156
洛谷P1156 垃圾陷阱 不难看出这是一道dp题,但是用什么元素去dp,需要考察。 首先一个垃圾具有三个属性,time(投喂时间),life(提供的存活时间)和height(具有的高度).时间时间没有任何的递推关系,不难想到我们有两种dp方式. 1、dp[i][j]第一维表示处理第i个垃圾,第二维表示现在存活时间为j,其值是现在的高度,我们需要用双循环,外层循环枚举所有垃圾,内层循环枚举所有存活时间,则状态转移方程是 dp[i+1][j+trash[i+1].life-(trash[i+1].tim
2022-12-02 14:40:02
276
7
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人