- 博客(117)
- 资源 (3)
- 收藏
- 关注
原创 算法提高课第三章负环
spfa算法可以求出图中是否存在负环一般求解负环有两种方法统计每个点入队的次数,如果有的点入队次数大于等n,那么存在负环统计到每个点的最短路径长度,如果长度大于等于n,那么存在负环spfa算法的几个注意点求解是否存在负环与dist初始值无关负环求最短路正环求最长路将队列换成栈有机会很快找到环路根据经验,在更新了很多次路径以后没有跳出循环,可以认为存在环。01规划问题,一般是求分数的最大值或者最小值,可以利用二分的思想转化为求解图上的环路问题904. 虫洞 - AcWin.
2021-12-22 23:19:50
116
原创 vscode使用记录
安装下载下载新版的vscode以及MinGW压缩包配置环境将MinGW的bin文件夹加入path环境变量中配置.vscode文件夹中的三个文件c_cpp_properties.json{ "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**" ],
2021-12-20 10:29:23
539
原创 算法提高课第二章IDA*
在迭代加深的基础上,使用预估函数检查是否满足层数要求180. 排书 - AcWing题库#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 15;int n;int q[N];int w[5][N];int f(){ int tot = 0; for(int i = 0; i + 1 < n.
2021-12-18 19:29:49
123
原创 算法提高课补充内容
1273. 天才的记忆 - AcWing题库st表求区间最值#include <iostream>#include <cstring>#include <algorithm>#include <cmath>using namespace std;const int N = 200010, M = 18;int n, m;int w[N];int f[N][M];void init(){ for(int j = 0; j <
2021-12-16 19:52:27
114
原创 设计——leetcode
155. 最小栈 - 力扣(LeetCode)class MinStack {public: stack<int> st; stack<int> minst; MinStack() { minst.push(INT_MAX); } void push(int val) { st.push(val); minst.push(min(minst.top(), val)); }
2021-12-12 22:24:41
3394
原创 dfs和bfs——leetcode
797. 所有可能的路径 - 力扣(LeetCode)class Solution {public: vector<vector<int>> ans; vector<int> stk; void dfs(vector<vector<int>>& graph, int x, int n) { if (x == n) { ans.push_back(stk);
2021-12-08 20:42:20
168
原创 滑动窗口——leetcode
30. 串联所有单词的子串 - 力扣(LeetCode)class Solution {public: unordered_map<string, int> mp; vector<int> findSubstring(string s, vector<string>& words) { //单词长度相同 int n = s.size(); int m = words[0].size();
2021-12-05 21:30:53
562
原创 LeetCode——计算表达式
224. 基本计算器 - 力扣(LeetCode)【进阶补充】双栈解决通用「表达式计算」问题class Solution {public: void replace(string &s) { int pos = s.find(" "); while(pos != -1) { s.replace(pos, 1, ""); pos = s.find(" "); }
2021-11-27 18:09:47
397
原创 算法提高课第一章状态机模型
划定每一个状态分析状态转移方程1049. 大盗阿福 - AcWing题库#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110000;int a[N];int dp[N][2];int n;int main(){ int t; cin >> t; while(t --) .
2021-11-25 17:03:20
123
原创 算法提高课第三章拓扑排序
164. 可达性统计 - AcWing题库求解拓扑序按照拓扑序求解状态(状态定义为bitset<N>)AcWing 164. 可达性统计(2种简单写法) - AcWing#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <bitset>#include <queue>using na
2021-11-24 21:26:46
82
原创 算法提高课第三章最小生成树及其扩展应用
任意一颗最小生成树可以包含权值最小的一条边生成树可以包含连接各个联通块的权值最小的边无向图才可以使用最小生成树算法1146. 新的开始 - AcWing题库建立一个超级发电站(虚拟源点),将点权转化为边权。#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 330;int n;int dist[N], w[N][N..
2021-11-24 18:24:15
516
原创 python爬虫爬取妹子图
爬取网页 req = urllib.request.Request(url) req.add_header('user-agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36') response = urllib.request.urlopen(req)
2021-11-22 11:12:35
692
原创 算法提高课第五章树状数组
树状数组和差分树状数组快速求前缀和修改某个数241. 楼兰图腾 - AcWing题库#include <iostream>#include <cstring>#include <algorithm>#define int long longusing namespace std;const int N = 200010;int n;int a[N];int tr[N];int g[N], l[N];int lowbit(int x.
2021-11-20 21:33:30
483
原创 算法提高课第四章并查集
并查集有两个功能:合并集合、查询祖宗节点优化方式:路径压缩,按秩合并记录每个集合的大小,绑定到根节点。记录每个点到根节点的距离,绑定到子节点并查集的高级应用:扩展并查集、带权并查集1250. 格子游戏 - AcWing题库#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 40010;int n, m;int f[N.
2021-11-20 17:30:22
2536
原创 算法提高课第一章上升子序列模型
基本模型:使用动态规划解决最长上升子序列问题, 核心是用以iii为结尾的序列来表示所有满足要求的集合1017. 怪盗基德的滑翔翼 - AcWing题库#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int dp1[N], dp2[N];//以i结尾的上升子序列的长度int a[N];int n;int ma.
2021-11-19 21:41:56
75
原创 算法提高课第一章树形dp
1072. 树的最长路径 - AcWing题库给定一棵树,树中包含 nnn 个结点(编号111~nnn)和 n−1n−1n-1 条无向边,每条边都有一个权值。现在请你找到树中的一条最长路径。换句话说,要找到一条路径,使得使得路径两端的点的距离最远。注意:路径中可以只包含一个点。输入格式第一行包含整数 nnn。接下来 n−1n−1n-1 行,每行包含三个整数 ai,bi,ciai,bi,cia_i,b_i,c_i,表示点 aiaia_i 和 bibib_i 之间存在一条权值为 cicic_i 的
2021-11-17 17:50:55
331
原创 如何将acwing中的题目转化为markdown
打开题目F12搜索元素ui bottom attached tab active martor-preview复制元素使用在线转换网站复制md
2021-11-17 17:44:03
184
原创 算法提高课第一章状态压缩dp
棋盘式(基于连通性)的dp小国王#include <iostream>#include <cstring>#include <algorithm>#include <vector>#define int long long using namespace std;const int N = 12, M = 1 << 10, K = 110;int n, m;vector<int> state;//合法状态int c
2021-11-15 16:30:13
464
原创 算法提高课第一章背包模型
多种多样的背包问题采药01背包装箱问题01背包AcWing 1022. 宠物小精灵之收服多重背包,一题三解。有一些精灵球,皮卡丘有一定的体力,在保证收服尽可能多的小精灵的情况下,使得皮卡丘的体力剩余最多皮卡丘的体力必须大于1,不然就裂开首先多收服小精灵,其次是少消耗体力多价值评价很容易想到,小精灵的价值大,体力的价值小,而且消耗体力是减少价值。这样题目就变成了裸的多重背包根据题目范围:可以设定小精灵的价值为10000,消耗体力的价值为-1,这要求得的最大价值就是一个混合体,解
2021-11-11 21:42:28
137
原创 算法提高课第一章数字三角形模型
有一种图,从起点到终点只能向右或者向左,这种图后边的状态不会影响前边的状态,可以用dp求解。AcWing 1015. 摘花生AcWing 1018. 最低通行费#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int a[N][N];int n;int dp[N][N];int main(){ m.
2021-11-11 21:26:55
136
原创 算法提高课第三章Floyd算法及拓展应用
floyd算法可以解决的问题:最短路传递闭包找最小环恰好经过k条边的最短路(倍增)//初始化for(int i = 1; i <= n; i ++ )for(int j = 1; j <= n; j ++ )if(i != j) dist[i][j] = inf; 集合:所有从i出发,最终走到j,且中间只经过节点编号不超过k的所有路径属性:路径长度的最小值最短路AcWing 1125. 牛的旅行#include <iostream>#include
2021-11-10 09:40:57
247
原创 算法提高课第三章单源最短路
将一个背景复杂的问题抽象为单源最短路问题。算法复杂度方面,迪杰斯特拉算法朴素版O(n2)O(n^2)O(n2),堆优化迪杰斯特拉O(mlogn)O(mlogn)O(mlogn),spfa O(nm)/O(m)O(nm) / O(m)O(nm)/O(m),floyd O(n3)O(n^3)O(n3)
2021-11-04 18:46:19
90
原创 markdown操作
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-11-04 17:50:30
239
原创 算法提高课第二章双向dfs
双向dfs不是同时从两个方向dfs,而是二分搜索的一种方式。对于一个很大的集合, 可以先搜索他的后半段,并且存储起来,然后搜索后半段,过程中利用存储的数据,使用二分等方法降低复杂度。AcWing 171. 送礼物#include <cstring>#include <iostream>#include <algorithm>using namespace std;typedef long long LL;const int N = 46;int.
2021-11-03 19:03:03
281
原创 算法提高课第二章迭代加深
在进行dfs时,有时候答案所在的层数不大,但是因为深搜而搜索多余的层数。迭代加深的思想是通过逐步增大搜索层数的方法,避免过深的搜索。因为dfs的搜索过程是指数增长的的,所以搜索多次在最坏情况下不会增加时间复杂度。170. 加成序列#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 110;int depth;int n;.
2021-11-03 18:57:26
151
原创 python学习
数字python 支持四种不同类型的数值,int、long integers、floating point real values、complex numbersx = 1print(int(x))print(float(x))print(complex(x))print(str(x))print(repr(x))11.0(1+0j)11python很多数学运算函数在math模块和cmath模块中import mathprint(dir(math))['__do
2021-11-01 18:10:22
207
原创 算法基础课第二章并查集
简单并查集(1)朴素并查集: int p[N]; //存储每个点的祖宗节点 // 返回x的祖宗节点 int find(int x) { if (p[x] != x) p[x] = find(p[x]); return p[x]; } // 初始化,假定节点编号是1~n for (int i = 1; i <= n; i ++ ) p[i] = i; // 合并a和b所在的两个集合: p[f
2021-10-31 17:47:58
106
原创 算法基础课第二章KMP
KMP算法用于进行字符串匹配。暴力的方法是每次失配就从模式串的头部进行匹配,但是因为有前后缀匹配的情况,不必每次回到头部,通过一个next数组, 可以在失配时让主串i去匹配next[j],这样能很快的进行匹配。如何使用next数组void KMP(string s, string p){ int j, i = 0; while(i < p.size()) { if(j == -1 || s[j] == p[i])//j == -1 说明第一个字符也不匹配,这样j归0, i增加
2021-10-31 17:01:33
211
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1