![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm
snow zhao
这个作者很懒,什么都没留下…
展开
-
数据结构总结
目录文章目录目录Unit 1 : 绪论Unit 2 : 线性表Unit 3 : 栈和队列Unit 4 : 串Unit 5 : 数组和广义表Unit 6 : 树和二叉树Unit 7 : 图Unit 8 : 查找Unit 9 : 排序Unit 1 : 绪论数据元素是数据的基本单位。一个数据元素可由若干个数据项组成。数据对象是性质相同的数据元素的集合,是数据的一个子集。数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据元素之间的关系称为结构,四类基本结构:集合:除了同属一个集原创 2020-06-26 22:59:46 · 636 阅读 · 0 评论 -
数据结构---栈的基本操作
数据结构学习-Unit3栈与队列-栈大一新生,刚学习数据结构。如有问题,望指正,本人将感激不尽。栈是一种重要的线性结构,具有后进先出的特性。元素只能从栈顶端压入,也只能从栈顶端弹出。我们先来看栈的结构:typedef struct stac{ int *top; int *bottom; int stacksize;}Stack;t...原创 2020-03-17 15:28:51 · 213 阅读 · 0 评论 -
搞懂gcd
gcd的概念gcd是指最大公约数,如gcd(6, 4)就是指6和4的最大公约数,结果显然是2。辗转相除法辗转相除法:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数,即gcd(a,b)=gcd(b,a%b)(a>b且a%b≠0)gcd(a, b) = gcd(b, a \% b)\qquad (a > b且a \% b \neq 0)gcd(a,b)=gcd(b,a%b)(a>b且a%b=0)证明:不妨设d=gcd(a,b)d = gcd(a, b)d=gc原创 2020-08-03 22:03:36 · 614 阅读 · 0 评论 -
基础的图论算法——拓扑排序,Dijkstra算法,Prim算法,Floyd算法
拓扑排序Q:不知道你是否也曾苦恼于生物里的求食物链数目的题目。如果现在任意给你一个食物网,你能用程序来求出这个食物网中食物链的数量吗?A:你初次看到这个题目时,也许会不知从何下手。但如果你之前对拓扑排序有所了解的话,你会发现这个题目其实很好解决。数一条食物链,往往从生产者入手,即那些只能被吃的生物,给这些生产者们每人一个初始权重1,给那些能够食用这些生产者的动物,送去他们能食用的所有植物,每食用一种,就在他们的初始权重0的基础上加上这种植物的权重。把生产者们从食物链中去掉,你会发现食物链中又多了一批只能原创 2020-08-03 00:53:01 · 525 阅读 · 0 评论 -
基础的字符串算法——KMP,Hash,Manacher
KMPKMP是一种高效的字符串匹配算法你仔细观察的话,不难发现,KMP算法选择了一个相当巧妙的位置进行了移动。而KMP算法的核心就是寻找这个巧妙的位置,我们把这个位置存储在一个数组里,一般把这个数组命名为next数组,寓意为匹配失败后,待匹配的字符串应该移动到的下一个位置。倘若遮住原来匹配失败的字母A和C和他们右边的所有内容,只告诉你匹配失败了,让你寻找下一个可能匹配成功的位置,那么你肯定会做出和KMP算法一样的移动方式,即找到’DCBD’的后缀中和’BDCBD’的前缀中相同部分最多的那个位置。而原创 2020-08-03 00:51:19 · 322 阅读 · 0 评论 -
郊区春游(NC16122)状压dp
链接**[Click here to see the original question](### 链接Click here to see the original question题目描述今天春天铁子的班上组织了一场春游,在铁子的城市里有n个郊区和m条无向道路,第i条道路连接郊区Ai和Bi,路费是Ci。经过铁子和顺溜的提议,他们决定去其中的R个郊区玩耍(不考虑玩耍的顺序),但是由于他们的班费紧张,所以需要找到一条旅游路线使得他们的花费最少,假设他们制定的旅游路线为V1, V2 ,V3 … VR,那原创 2020-07-30 19:15:55 · 194 阅读 · 0 评论 -
锁(NC14732)状压dp
链接Click here to see the original question题目描述106号房间共有n名居民, 他们每人有一个重要度。房间的门上可以装若干把锁。假设共有k把锁,命名为1到k。每把锁有一种对应的钥匙,也用1到k表示。钥匙可以复制并发给任意多个居民。每个106房间的居民持有若干钥匙,也就是1到k的一个子集。如果几名居民的钥匙的并集是1到k,即他们拥有全部锁的对应钥匙,他们都在场时就能打开房门。新的陆战协定规定,一组居民都在场时能打开房门当且仅当他们的重要度加起来至少为m。问至少需要给原创 2020-07-30 19:12:45 · 512 阅读 · 1 评论 -
好朋友(NC19367)数位
链接Click here to see the original question题目描述BLUESKY007有很多关系很好的朋友,他们无一例外,名字均由数字组成(首字符不为0)且含有"007"(例如“10007”,“10707”就是她的好朋友,而“97037”,“70709”不是),即对于字符串s存在i,j,k(i< j< k)满足sisjsk‾=007‾\overline{s_is_js_k} = \overline{007}sisjsk=007虽然BLUESKY007眼力极原创 2020-07-30 19:09:25 · 231 阅读 · 0 评论 -
黑白树(NC13249)树状dp入门
链接Click here to see the original question题目描述一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1。树上每个节点i对应一个值k[i]。每个点都有一个颜色,初始的时候所有点都是白色的。你需要通过一系列操作使得最终每个点变成黑色。每次操作需要选择一个节点i,i必须是白色的,然后i到根的链上(包括节点i与根)所有与节点i距离小于k[i]的点都会变黑,已经是黑的点保持为黑。问最少使用几次操作能把整棵树变黑。输入第一行一个整数n (1 ≤ n ≤ 10^原创 2020-07-30 19:00:23 · 262 阅读 · 0 评论 -
方格取数(HDU1565)状压dp入门
有详细的注释#include <bits/stdc++.h>using namespace std;typedef long long int ll;int n, choices[100009], rowsum[100009], totalsum[100009], board[30][30], choicenum;void dfs(int row, int cur_col, int choice, int sum) { //choice用二进制的形式来记录,比如说4*4的棋盘原创 2020-07-28 20:41:28 · 133 阅读 · 0 评论 -
明七暗七(NC17867)数位dp
代码中有详细解释,cnt要使用long long int(害我找了好久)????#include <bits/stdc++.h>using namespace std;typedef long long int ll;ll m, n, cntn, cntx, dp[20][10][2];int bit[20];ll DFS(int pos, int remain, bool isMax, bool hasSeven) { //pos:位数, remain:上一位残留下来的余原创 2020-07-28 09:53:48 · 1377 阅读 · 0 评论 -
不要62(HDU 2089) 数位dp入门
代码中有详细的注释#include <bits/stdc++.h>using namespace std;int n, m, bit[11], dp[11][2];int DFS(int pos, bool isSix, bool isMax) { //pos表示当前遍历的位数,isSix表示上一位是否为6,isMax表示上一位的值是否为相应的最大可能值 if(pos == 0) return 1; //已经把所有的位数都遍历完毕,确定了一种可行方案原创 2020-07-28 00:27:02 · 137 阅读 · 2 评论 -
AC自动机
P3808 【模板】AC自动机(简单版)#include <iostream>#include <queue>using namespace std;int n;string s, t;struct nd{ int end; int child[26];//存储儿子节点的下标位置 int fail;};nd TrieTree[1000009];int TreeLen = 0;void BuildTrieTree(string str原创 2020-07-25 15:21:06 · 92 阅读 · 0 评论 -
NC25136、NC107658、NC14661、NC15163
切长条牛客链接题目描述给定如图所示的若干个长条。你可以在某一行的任意两个数之间作一条竖线,从而把这个长条切开,并可能切开其他长条。问至少要切几刀才能把每一根长条都切开。样例如图需要切两刀。输入描述Line 1: A single integer, N(2 <= N <= 32000)Lines 2…N+1: Each line contains two space-separated positive integers that describe a leash. The first原创 2020-07-25 14:39:29 · 227 阅读 · 0 评论 -
算法学习——前缀和
前缀和1、 题目:校门外的树牛客链接题目描述某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。输原创 2020-07-25 14:35:20 · 304 阅读 · 0 评论