Acwing刷题
文章平均质量分 54
张李浩
这个作者很懒,什么都没留下…
展开
-
DP动态规划----算法提高课
二维费用的背包问题二维费用的背包问题可以和01背包、完全背包、多重背包、分组背包结合Acwing08二维费用的背包问题地址https://www.acwing.com/problem/content/description/8/描述思路代码将二维优化为一维#include <iostream>using namespace std;const int N=1010;int n,V,M;int f[N][N];int main(){ cin>>n原创 2021-12-08 08:49:07 · 80 阅读 · 0 评论 -
单调栈-----ACwing830找到每个数左边第一个比它小的数(存y)---(例题Leetcode084柱状图中最大的矩形)(例题既找左边也找右边,且存下标)
地址https://www.acwing.com/problem/content/description/832/描述思想动态过程代码模板#include <iostream>#include <stack>using namespace std;const int N=1e5+10;int a[N];stack<int> s;int main(){ int n; cin>>n; for(int i=0;原创 2021-12-06 20:01:15 · 97 阅读 · 0 评论 -
DFS------算法提高课
DFS之连通性模型Acwing1112迷宫地址https://www.acwing.com/problem/content/1114/描述留有疑问为什么不用回溯呢?思想使用DFS解决迷宫问题,只能找出起点和终点是否联通,不能找出最短路径,因为不能保证DFS第一次到达终点的路线是最短路径。而BFS可以实现起点和终点是否联通,以及最短路径的求解。代码#include <iostream>#include <cstring>#include <algori原创 2021-11-22 16:21:42 · 438 阅读 · 0 评论 -
字符串的哈希方式
地址https://www.acwing.com/problem/content/843/思想例题代码#include <iostream>#include <cstring>#include <algorithm>using namespace std;//p一般取131防止出现冲突。const int N=1e5+10,p=131;typedef unsigned long long ULL;int n,m;//h[]用来存储前缀的ha原创 2021-11-20 16:03:31 · 175 阅读 · 0 评论 -
Leetcode003---无重复字符的最长子串(注意与子序列的区别)
地址https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/描述思想使用unordered_map存储每个字符出现次数。枚举以i为尾端点的所有字串,i----[0,n-1],找到其中最长的不重复字串我们可以进行试验,发现当i向右移动时,j也一定向右移动,具有单调性。出现的错误为什么一定要heap[s[i]]>1?heap[s[j]]>1不行吗?反例原创 2021-11-10 10:00:19 · 232 阅读 · 0 评论 -
贪心算法-----Acwing算法基础课(11.13前需重新刷一遍)
目录区间问题Acwing905区间选点问题地址:问题描述:思路解析代码Acwing908最大不相交区间数量(区间选点问题的另一种说法)地址:描述:思路:代码:Acwing906区间分组地址:描述:思路:代码:Acwing907区间覆盖地址描述思路代码贪心算法属于短视算法,其代码一般都较为简洁,难在证明区间问题涉及区间问题一般都需要先排序Acwing905区间选点问题地址:https://www.acwing.com/problem/content/907/问题描述:思路解析https:/原创 2021-10-23 22:14:38 · 769 阅读 · 0 评论 -
质数的判断
Acwing 866 试除法判断是否为质数地址:描述:代码:Acwing867 分解质因数地址:描述:思想:代码:Acwing868筛质数(朴素、埃氏、线性筛)地址:描述:思想:朴素版:埃氏:线性筛法:代码:朴素:O(nlogn)埃氏:O(nloglogn)线性筛:Acwing 866 试除法判断是否为质数地址:https://www.acwing.com/problem/content/description/868/原创 2021-09-07 23:49:41 · 151 阅读 · 0 评论 -
Acwing2816判断子序列-----双指针
地址:https://www.acwing.com/problem/content/2818/描述:思路:初始化两个指针 i和 j,分别指向 a和 b的初始位置。每次贪心地匹配,匹配成功则 i和 j同时右移,匹配 a的下一个位置,匹配失败则 j右移,i不变,尝试用 b的下一个字符匹配 a。代码:#include <iostream>using namespace std;//暴力法int main(){ int n,m; ...原创 2021-09-04 14:10:03 · 77 阅读 · 0 评论 -
离散化(暂时学这么多)
思想:模板vector<int> alls; // 存储所有待离散化的值sort(alls.begin(), alls.end()); // 将所有值排序alls.erase(unique(alls.begin(), alls.end()), alls.end()); // 去掉重复元素// 二分求出x对应的离散化的值int find(int x) // 找到第一个大于等于x的位置{ int l = 0, r = alls.size() - 1; ..原创 2021-09-04 12:41:20 · 56 阅读 · 0 评论 -
位运算、lowbit()算法
讲解视频:求n的二进制表示lowbit()运算简单应用:地址:代码:讲解视频:https://www.acwing.com/video/14/求n的二进制表示//已知10的二进制表示是1010#include <iostream>#include <string.h>int main(){int n=10;for(int k=3;k>=0;k--) cout<<(n>>k&&1...原创 2021-09-04 09:34:14 · 99 阅读 · 0 评论 -
Kruskal算法求最小生成树(合并集合)
地址:https://www.acwing.com/problem/content/861/用到的合并集合知识:https://blog.csdn.net/qq_52934831/article/details/120032035?spm=1001.2014.3001.5501描述:思想:代码:#include <iostream>//sort 函数要用到#include <algorithm>using namespace std;in原创 2021-09-01 21:59:41 · 4581 阅读 · 1 评论 -
合并集合(并查集)+求集合的个数
只实现联通功能地址:https://www.acwing.com/problem/content/838/描述:思想://普通版的find()函数,返回祖宗节点int find(int x) { if (x == p[x]) //如果x是祖先,则返回 return x; else return find(p[x]); //如果x不是祖先,那么就去问x的爸爸它的爸爸是不是祖宗节点}//路径压缩的find函数,...原创 2021-09-01 14:51:03 · 417 阅读 · 0 评论 -
prim算法求最小生成树------Acwing858
地址:描述:思想:令我困惑的点:for(int j=1;j<n;j++){if(dist[j]>g[t][j]) dist[j]=g[t][j];}这句话的涵义是为了更新生成树外的点到生成树的距离按道理来说dist[j]应该与与dijkstra算法的区别:dijkstra算法:if(dist[j]>dist[t]+g[t][j]) dist[j]=dist[t]+g[t][j];prim算法:if(dist[j]>g[t][..原创 2021-08-31 20:56:13 · 305 阅读 · 0 评论 -
Floyd算法找最短路(基于邻接矩阵)
地址:描述:思想:代码:地址:https://www.acwing.com/problem/content/856/描述:思想:代码:#include<iostream>#include <cstring>using namespace std;const int N=210;#define INF 0x3f3f3f3fint dist[N][N];int n,m,k;//执...原创 2021-08-31 14:44:43 · 327 阅读 · 0 评论 -
SPFA算法求最短路和判断负环(支持负权边)
地址:https://www.acwing.com/problem/content/853/描述:思路:1、什么是spfa算法?SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA一般情况复杂度是O(m)O(m) 最坏情况下复杂度和朴素 Bellman-Ford 相同,为O(nm)O(nm)。bellman-ford算法操作如下:for n次 for 所有边 a,b,w (松弛操作) dis.转载 2021-08-30 19:26:26 · 282 阅读 · 0 评论 -
bellman_fort算法求最短路
地址:描述:思路:问题一:问题二:代码:正常模板:本题:地址:https://www.acwing.com/problem/content/855/描述:思路:问题一:为什么需要backup[N]数组为了避免如下的串联情况, 在边数限制为一条的情况下,节点3的距离应该是3,但是由于串联情况,利用本轮更新的节点2更新了节点3的距离,所以现在节点3的距离是2。正确做法是用上轮节点2更新的距离--无穷大,来更新节点3, 再取最小值,所以节点..原创 2021-08-30 16:07:03 · 103 阅读 · 2 评论 -
Dijkstra算法求最短路问题
地址:https://www.acwing.com/problem/content/851/描述:m是n^2级别的话就是稠密图,m是n级别的就是稀疏图稠密图:用堆优化(稀疏图):思路:初始时, S只包含起点s;U包含除s之外的其他顶点,且U中顶点的距离为“起点s到该顶点的距离”【例如:U中顶点v的距离为(s, v)的长度,然后s和v不相邻,则v的距离为∞】。 从U中选出“距离最短的顶点k”,并将顶点k加入到S中;同时,从U中移除顶点k。 更新U中各个顶点到起点s的距.原创 2021-08-30 11:09:54 · 407 阅读 · 0 评论 -
搜索与图论(11.4号看了bellman_sort算法)
稠密图的Dijkstra算法:题解:堆优化改进的Dijkstra算法(稀疏图)题解:问题代码:bell_man fort算法SPFA算法题解核心思想:用更新过的点,更新其他点Floyd算法解决多源问题:Prim算法求最小生成树Kruskal算法m是n^2级别的话就是稠密图,m是n级别的就是稀疏图稠密图的Dijkstra算法:题解:https://blog.csdn.net/qq_52934831/article/detai...原创 2021-08-29 23:17:37 · 120 阅读 · 0 评论 -
图的DFS和BFS-------(基于邻接表)以及拓扑排序
转载:https://blog.csdn.net/qq_39328436/article/details/106956963?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163012979216780271520735%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163012979216780271520原创 2021-08-28 20:57:16 · 700 阅读 · 0 评论 -
Acwing848有向图的拓扑序列---------bfs
地址:https://www.acwing.com/problem/content/850/描述:思路:用队列来执行 ,初始化讲所有入度为0的顶点入队。主要由以下两步循环执行,直到不存在入度为 0 的顶点为止选择一个入度为 0 的顶点,并将它输出; 删除图中从顶点连出的所有边。循环结束,若输出的顶点数不等于图中的顶点数+1,则表示该图存在回路,即无法拓扑排序,否则,输出的就是拓扑序列 (不唯一)代码:#include <cstring>#.原创 2021-08-29 19:09:38 · 121 阅读 · 0 评论 -
Acwing847图中点的层次-------bfs
地址:https://www.acwing.com/problem/content/849/描述:思路:代码:#include <cstring>#include <queue>#include <iostream>using namespace std;int n,m;//n个点和m条边const int N=1e5+10;int d[N];int h[N],e[N],ne[N],idx;queue<int> q..原创 2021-08-29 15:01:37 · 105 阅读 · 0 评论 -
Acwing846树的重心---------dfs(邻接表)
地址:https://www.acwing.com/problem/content/description/848/描述:思路:本题的本质是树的dfs, 每次dfs可以确定以u为重心的最大连通块的节点数,并且更新一下ans。也就是说,dfs并不直接返回答案,而是在每次更新中迭代一次答案。这样的套路会经常用到,在 树的dfs 题目中总结以u为根的子树个数可由dfs(j)不断递归得到特别注意:由于本题给出的图是无向图,假如首次遍历,不论取那个节点,它...原创 2021-08-29 10:55:50 · 204 阅读 · 1 评论 -
Acwing845(8数码)--------bfs
地址:https://www.acwing.com/problem/content/847/描述:输出答案为:19思路:和之前的找最短出路思路差不多代码:#include<iostream>#include<queue>#include<unordered_map>using namespace std;//保存字符串=>代表了当前棋盘的状态queue<string> q;//保存从起点到当前状态需...原创 2021-08-27 19:58:29 · 98 阅读 · 0 评论 -
Acwing844走迷宫(最短路问题)----------(bfs)
地址:https://www.acwing.com/problem/content/846/描述:代码:根据bfs的原理,从起点第一次走到终点走的一定是最短路径#include <iostream>#include <cstring>//因为bfs需要借助queue,所以加上头文件#include <queue>using namespace std;int n,m;const int N=1e2;int g[N][N];//存放迷原创 2021-08-27 14:27:16 · 146 阅读 · 0 评论 -
Acwing843、Leetcode051(n-皇后问题)--------DFS(全排列)
地址:https://www.acwing.com/problem/content/845/描述:思路:整体的思路:我们要枚举每一行的皇后应该放在第几列上其实和全排列的思想非常类似代码:回溯(剪枝)思路:#include <iostream>using namespace std;int n;//1<=n<=9const int N=10;char qi[N][N];//分别记录的是该位置的列,正对角线,斜对角线上是否放过皇.原创 2021-08-26 11:08:51 · 164 阅读 · 0 评论 -
Acwing790(数的三次方根)--------(二分法)
地址:https://www.acwing.com/problem/content/792/描述:代码:#include <iostream>using namespace std;int main(){ double n; cin>>n; //为了防止x是小数的情况 double l=-10000,r=10000; while(r-l>1e-8){ double mid=(l+r)/2;原创 2021-08-25 15:57:55 · 209 阅读 · 0 评论 -
Acwing788逆序对的数量-------(分治,归并排序)
地址:https://www.acwing.com/problem/content/790/题解:https://www.acwing.com/video/230/描述:思路:我们将序列从中间分开,将逆序对分成三类:两个元素都在左边; 两个元素都在右边; 两个元素一个在左一个在右;代码:#include<iostream>using namespace std;int n;const int N=1e5;int q[N],temp[N.原创 2021-08-25 09:47:53 · 88 阅读 · 0 评论