随笔分类 -  算法合集

本人学算法的过程
摘要:0地宫取宝 - 蓝桥云课 (lanqiao.cn) 对于该问题,首先是个迷宫问题,于是先考虑暴力求解,对于暴力来说,有这样一种方法: 对于任何一点来说,都可以进行选或者不选,然后当走到终点时如果符合条件则答案加 $1$,这样做的时间复杂度是 $2^n 也就是 2^50$,很明显得不到满分. 既然是迷 阅读全文
posted @ 2024-02-27 21:06 o-Sakurajimamai-o 阅读(11) 评论(0) 推荐(0) 编辑
摘要:首先是单调队列: 其实单调队列就是一种队列内的元素有单调性(单调递增或者单调递减)的队列,答案(也就是最优解)就存在队首,而队尾则是最后进队的元素。因为其单调性所以经常会被用来维护区间最值或者降低$DP$的维数已达到降维来减少空间及时间的目的。 类似于滑动窗口等,单调队列具有时序性的储存区间最大值或 阅读全文
posted @ 2024-02-06 16:36 o-Sakurajimamai-o 阅读(18) 评论(0) 推荐(0) 编辑
摘要:本章节部分参考:2020,2021 年 CF 简单题精选 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) T1:Problem - B - Codeforces 首先,很容易观察到点的一些特征: - 都在第一象限;- 点的分布越来越稀疏。 以样例为例: 还有无限个点没有画 阅读全文
posted @ 2024-01-29 20:18 o-Sakurajimamai-o 阅读(787) 评论(0) 推荐(1) 编辑
摘要:尼姆($nim$)游戏: P2197 【模板】Nim 游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 对于博弈论游戏,如果当前的选手具有控制权的话,那么当前选手是必赢的,也就是当前选手做出的这步选择后,之后的局面都是在其预料之中的,换句话说,先掌握了控制权即赢. 考虑什么情况 阅读全文
posted @ 2024-01-29 17:46 o-Sakurajimamai-o 阅读(13) 评论(0) 推荐(0) 编辑
摘要:区间DP具有两种形式的模板 这里以P1775 石子合并(弱化版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)为例 第一种是枚举区间长度然后进行动态规划: 枚举合并的区间然后进行递推: #include<bits/stdc++.h> using namespace std; co 阅读全文
posted @ 2024-01-28 07:35 o-Sakurajimamai-o 阅读(3) 评论(0) 推荐(0) 编辑
摘要:逆序对定义:对于给定的一段正整数序列,逆序对就是序列中 $a_i&gt;a_j$ 且 $i&lt;j$ 的有序对。 P1908 逆序对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc++.h> #define int long long usi 阅读全文
posted @ 2024-01-24 16:12 o-Sakurajimamai-o 阅读(24) 评论(0) 推荐(0) 编辑
摘要:主要是在棋盘上的DP,棋盘上每个点的转移状态基本上都是已知的 //https://www.luogu.com.cn/problem/P1896 //压状dp //由于时间复杂度达到了指数级复杂度,所以搜索不能进行 //考虑动态规划,dp i,j,k表示 第i行,使用了j个国王,此时的状态是k // 阅读全文
posted @ 2023-11-14 10:07 o-Sakurajimamai-o 阅读(17) 评论(0) 推荐(0) 编辑
摘要:【动态规划】滚动数组的求解(C++) - 林、Zephyr - 博客园 (cnblogs.com) 【精选】滚动数组(简单说明)_儒rs的博客-CSDN博客 //https://www.luogu.com.cn/problem/P2679 /* # 定义状态 # 对于任意一个 0 <= i <= n 阅读全文
posted @ 2023-11-12 15:21 o-Sakurajimamai-o 阅读(29) 评论(0) 推荐(0) 编辑
摘要://http://ybt.ssoier.cn:8088/problem_show.php?pid=1302 #include<bits/stdc++.h> using namespace std; const int N=2e5+10; int dp[N][3][3],n,w[N],t; int m 阅读全文
posted @ 2023-11-11 13:16 o-Sakurajimamai-o 阅读(13) 评论(0) 推荐(0) 编辑
摘要:迭代加深: //迭代加深搜索 //给搜索设定一个范围,如果在这个范围内没有答案那么再加大搜索范围 //这么做是为了防止搜索过深,导致利用大量时间搜索无用信息 //如果当前搜索是第10位,搜索的是个二叉树,那么前9个就是2^0+2^1+2^2+..+2^9=2^10-1,所以时间复杂度并没增大太多 / 阅读全文
posted @ 2023-11-02 20:03 o-Sakurajimamai-o 阅读(22) 评论(0) 推荐(0) 编辑
摘要:预计时间一个月,一天的量为1-2道左右,难度不均,黄-紫都有,后阶段紫 // https://www.luogu.com.cn/problem/P4141 // 对于任何一个物品对答案的贡献都是从1到n递推过去的,所以 // 只需要开一个相同的数组然后从头遍历一遍,把该物品对答案的贡献减去就可以了 阅读全文
posted @ 2023-10-26 14:51 o-Sakurajimamai-o 阅读(20) 评论(0) 推荐(0) 编辑
摘要:杨辉三角: //https://www.luogu.com.cn/problem/P1118 //最优性剪枝: //由高中知识可得,abcd四个数符合杨辉三角的数相乘,即 //res=a+3*b+3*c+d,前面的常数项也就是杨辉三角的数字 //根据此结论,进行剪枝 //由于暴力枚举全排列+部分剪枝 阅读全文
posted @ 2023-10-16 19:02 o-Sakurajimamai-o 阅读(44) 评论(0) 推荐(0) 编辑
摘要://http://codeforces.com/problemset/problem/1690/E //利用set数组 里面储存的是 每一个数字%k之后的数字,由于特殊性,一个数大于k,那么就算这个数+0他对答案的贡献最少也是 m/k的价值 //所以可以直接计算价值,然后第二位储存编号,便于分辨 / 阅读全文
posted @ 2023-10-13 13:43 o-Sakurajimamai-o 阅读(10) 评论(0) 推荐(0) 编辑
摘要://https://www.luogu.com.cn/problem/P3865 //类似于动态规划和压状dp //f[i][j]是从i位置开始到i+2^j-1的区间内的最大值,一步一步更新所有区间的最大值 //有距离限制,即到达某一位置时,j可能过大导致越界,所以对与每个i,有区间属于:[1,n- 阅读全文
posted @ 2023-09-25 15:15 o-Sakurajimamai-o 阅读(95) 评论(0) 推荐(0) 编辑
摘要:节点(Node):树形结构中的基本单位,可以表示数据元素或对象。节点可以包含一个或多个子节点。 根节点(Root Node):树的顶层节点,它没有父节点,是整个树的起点。 子节点(Child Node):树中每个节点都可以有零个或多个子节点,子节点是位于其父节点下方的节点。 父节点(Parent N 阅读全文
posted @ 2023-09-05 12:14 o-Sakurajimamai-o 阅读(59) 评论(0) 推荐(0) 编辑
摘要:状态压缩也就是把多个状态都转译成一个状态,由于题目的题意就是需要一步一步递推也就是dp,但是常规的dp只能计算一个状态,无法满足多个状态,所以可以使用状态压缩. 将这多个状态划分为二进制形式:设有$m$个状态,那么所有的可能状态为 $2^m$ ,如果有4个状态,$0010$ 表示只满足了第二个状态, 阅读全文
posted @ 2023-09-02 17:36 o-Sakurajimamai-o 阅读(51) 评论(0) 推荐(0) 编辑
摘要://组合数 // O(n^2),预处理递推 //n 1~2e3 #include<bits/stdc++.h> using namespace std; const int N=1e3+10,mod=1e9+7; int n,m,c[N][N]; int main() { cin>>n; for(i 阅读全文
posted @ 2023-08-21 18:59 o-Sakurajimamai-o 阅读(63) 评论(0) 推荐(0) 编辑
摘要:首先,DAG求最短路是有四种方法,分别是 SPFA,Dijkstra,拓扑,记忆化深搜 注意,求最长路只有三种,Dijkstra不适用于最长路,我tm纠结了3个小时,操操操操操操操操操操操 // //车站分级 // //https://www.luogu.com.cn/problem/P1983 # 阅读全文
posted @ 2023-08-07 13:57 o-Sakurajimamai-o 阅读(112) 评论(0) 推荐(0) 编辑
摘要:树的重心:找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。使得以该节点为根的子树中,最大子树高度最小的节点 //会议 //https://www.luogu.com.cn/problem/P1395 // f数组:f数组用于记录以每个节 阅读全文
posted @ 2023-08-06 10:25 o-Sakurajimamai-o 阅读(15) 评论(0) 推荐(0) 编辑
摘要://单点修改查询 //http://ybt.ssoier.cn:8088/problem_show.php?pid=1549 //https://www.luogu.com.cn/problem/P1198 //用一维数组来存,当作完全二叉树来存 #include<bits/stdc++.h> us 阅读全文
posted @ 2023-07-22 11:46 o-Sakurajimamai-o 阅读(8) 评论(0) 推荐(0) 编辑

-- --