摘要:
DP问题 定义 什么是 \(DP\),答曰:一种通过将全局问题分解成不同的子问题来进行对复杂问题的计算。 在我看来就是一种递推的 \(ProMax\) 版,依旧是用之前计算过的来推出现在要计算的。 DP板子问题 P1115 最大子段和 思路 我们用 \(dp\) 数组来定义到 \(i\) 为止,最大 阅读全文
摘要:
最小生成树 定义 什么是最小生成树呢? 好问题,通俗来说就是给你一个图( \(n\) 个节点),让你选 \(n-1\) 条边使其保持连通,但是又要保证所选的边的和最小。 P3366 【模板】最小生成树 思路(Kruskal) 我们应该怎么实现呢,不妨将要选的边排个序,从小到大选,诶,好想法,这也是一 阅读全文
摘要:
离散化 定义 离散化本质是一种哈希,是一种用来处理数据的方法。 1.创建原数组的副本。 2.将副本中的值从小到大排序。 3.将排序好的副本去重。 4.查找原数组的每一个元素在副本中的位置,位置即为排名,将其作为离散化后的值。 B3694 数列离散化 代码 #include<iostream> #in 阅读全文
摘要:
单调栈 定义 单调栈,就是一个栈,不过栈内元素保证单调性。即,栈内元素要么从小到大,要么从大到小。 而单调栈维护的就是一个数前/后第一个大于/小于他的数。 直接看模板题。 P5788 【模板】单调栈 思路 首先 \(f(i)\) 表示的是从 \(i\) 之后第一个大于 \(a_i\) 的元素的下标。 阅读全文
摘要:
最短路问题 单源最短路 全源最短路 Floyd算法 通过转移方程判断 i -> j 的路径中,是否有 i -> k -> j 更短,运用简单 dp 来转移状态。 f[i][j] 表示 i -> j 的最短路径长度。 但不要忘了初始化,一个点到其本身的最短路径为 1,即 f[i][i] = 1,其余的 阅读全文
摘要:
图的基本操作 图的存储 1.邻接矩阵 //对于一个正常的边 (u,v,w) vector<int> a[MAXN]; a[u].push_back(v); a[v].push_back(u); 2.链式前向星 //对于一个正常的边 (u,v,w) struct node{ int to,next,l 阅读全文
摘要:
深度优先搜索 定义 简单来说就是,一条路走到死,不行的话就回溯,继续一条路走到死,直到抵达目标点。 习题 P2052 [NOI2011] 道路修建 思路 首先,看题目对于花费的定义,道路的长度*道路两端国家数的差值的绝对值,观察一下这个应该怎么计算,我们很明显能想到树子树大小,于是我们只要知道其中一 阅读全文
摘要:
贪心问题 定义 顾名思义,越贪越好。。。 习题 P1094 [NOIP2007 普及组] 纪念品分组 思路 简单来说:最少的+最多的,利用双指针。 代码 #include<algorithm> #include<iostream> using namespace std; int w,n; int 阅读全文
摘要:
递归问题 定义 简洁来说就是一个函数不断调用自身的一个过程。 习题 汉诺塔问题 思路 对于这个经典的问题,我们考虑了使用递归的做法,由于盘子是在三个底座上来回辗转的,所以我们要确定起始座,辅助座,和目标座。我们专注于最下面的最大的那个盘子,先将盘子都放到辅助座上,等到只剩最大的,将其放到目标座上,再 阅读全文
摘要:
题目传送门 简述题目: 题目要求找出满足条件 \(σ(i) = n\) 的最小整数 \(i\),其中 \(σ(i)\) 表示 \(i\) 的所有正因子的和。 解题思路: 首先定义一个函数 \(Suum(i)\),用于计算 \(i\) 的所有正因子的和。在函数内部,使用一个循环遍历 \(i\) 的所有 阅读全文