算法
文章平均质量分 60
@居安
未来已经到来,只是尚未流行
展开
-
静态链表(数组模拟链表)
//e,存储节点的数值,ne,存储下一个节点的位置int e[N],ne[N],head,idx;void init(){ head=-1; idx=0;}//加入头节点void add(int x){ e[idx]=x; ne[idx]=head; head=idx; idx++;}void add_k(int x,int k){ e[idx]=x; ne[idx]=ne[k]; ne[k]=idx; idx++;.翻译 2022-03-09 15:21:02 · 68 阅读 · 0 评论 -
组合数的两种求法
我们利用这个公式,求的组合数,然后通过打表的方式,求出答案#include <iostream>#include <algorithm>using namespace std;const int N =2010;const int mod =1e9+7;int d[N][N];int dabiao(){ for(int i=0;i<N;i++) for(int j=0;j<=i;j++) if(j==0)d[原创 2022-03-03 15:20:18 · 93 阅读 · 0 评论 -
前缀和与差分
一维前缀和:类似我们的前N项和 原数组: a1 , a2 , a3 , a4 , a5 , a6 , a7 前缀和: Si=a1+a2+a3+…….+ai;题目:对于每个询问,输出原序列中从第l个数到第r个数的和 第一行包含2个整数:n和m 第二行包含n个整数,表示整块数列 接下来m行,每行都包含2个整数l和r,表示一个询问区间范围 #include<iost...原创 2021-11-26 21:50:51 · 181 阅读 · 0 评论 -
扩展欧几里得算法
啦啦啦,啦啦啦,我是一位程序员,天天都要敲代码~~~~欧几里得算法又称辗转相除法,是指用于计算两个非负整数a,b的最大公约数。应用领域有数学和计算机两个方面。计算公式gcd(a,b) = gcd(b,a mod b)。 ------度娘有朋友可能对gcd(b,a mod b)为啥b在前面,其实这是一...原创 2021-11-06 00:17:03 · 151 阅读 · 0 评论 -
质数(相关理解)
不图啥,只是为了我敲代码时,敲的更快一点 heihei质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 -----百度百科1,判定质数 先上我们暴力的算法,叫做试除法, bool prime(int n){ if(n<2)retur...原创 2021-10-19 21:24:40 · 143 阅读 · 0 评论 -
蒙德里安的梦想(状态压缩DP)
看美女不图啥,只是为了敲代码敲的更快点 ,嘻嘻嘻求把N×MN×M的棋盘分割成若干个1×21×2的的长方形,有多少种方案。例如当N=2,M=4N=2,M=4时,共有55种方案。当N=2,M=3N=2,M=3时,共有33种方案。如下图所示:输入格式输入包含多组测试用例。每组测试用例占一行,包含两个整数NN和MM。当输入用例N=0,M=0N=0,M=0时,表示输入终止,且该用例无需处理。输出格式每个测试用例输出一个结果,...原创 2021-10-06 18:11:58 · 225 阅读 · 0 评论 -
单调子序列问题——dilworth定理
老规矩上图 我每天坚持看美女,不为了啥,只是为了我心情愉悦,嘻嘻嘻嘻单调子序列关于长度的四种问题 我是从这里知道还有这样的分类,大家可以去光顾下他的B站本次主要是dilworth定理在子序列问题的应用,至于想要更深层次的理解可以退出了Dilworth定理,一言以蔽之,偏序集能划分成的最少的全序集个数等于最大反链的元素个数对子序列问题来说,就是最长原链长度=反链最小划分数,但何为反链尼,也就是最长上升子序列的长...原创 2021-09-19 22:18:54 · 408 阅读 · 0 评论 -
浅谈bfs与dfs
这几天刷了点bfs与dfs的题,来总结下, 上~~~~上图 咳~咳~咳 错了。。。。。好了,好了,咋也是正经人,进入主题dfs dfs实叫深度优先搜索算法,起始它只是一种搜索的方法思路,并没有固定的算法格式,假设这样的情景,一个姑娘爱你爱的深沉,被你拒绝了好多次了,可就是不放弃你说“只要你没有结婚,我就有机会”,典型的不撞南墙不回头,一条道走到黑,这种。。。。对,就是这样的,dfs就是有着你追隔壁班女神的这样的执着,说到这里,继续上图。。。。假设你穿...原创 2021-08-21 11:25:26 · 198 阅读 · 0 评论 -
有边数限制的最短路-fellman-ford算法
传送门给定一个 n 个点 m条边的有向图,图中可能存在重边和自环, 边权可能为负数。请你求出从 1号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n号点,输出 impossible。注意:图中可能 存在负权回路 。对于串联情况后面有我的一点理解#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>..原创 2021-08-15 22:58:12 · 250 阅读 · 1 评论 -
手写堆理解记录
堆排序传送门#include <iostream>#include <algorithm>using namespace std;const int N =1000010;int h[N];int n,m,size;void down(int i){ int u=i; if(2*u<size&&h[2*u]<h[t])t=2*u; if(2*u+1<size&&h[2*u+1]&l...原创 2021-08-15 16:59:16 · 100 阅读 · 0 评论 -
Dijkstra裸题
#include<iostream>#include<cmath>#include<cstdio>#include<algorithm>#include<vector>#include<queue>#include<cstring>using namespace std;const int nmax=2000,mmax=2010;int n,m;int maps[nmax][nmax];int dis.原创 2021-08-15 15:25:36 · 94 阅读 · 0 评论 -
初学字典树
又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。 -----度娘...原创 2021-08-11 15:43:22 · 78 阅读 · 0 评论 -
并查集自己理解
并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中。其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,计算机无法承受;即使在空间上勉强通过,运行的时间复杂度也极高,根本就不可能在比赛规定的运行时间(1~3秒)内计算出试题需要的结果,只能用并查集来描述。并查集是一种树型的数据结构,用于处理一些不相交原创 2021-08-03 15:34:26 · 142 阅读 · 0 评论 -
单调栈及单调栈的应用
什么是单调栈单调递增栈:单调递增栈就是从栈底到栈顶数据是从大到小 单调递减栈:单调递减栈就是从栈底到栈顶数据是从小到大解决那类问题 要知道单调栈的适用于解决什么样的问题,我们首先需要知道单调栈的作用。单调栈分为单调递增栈和单调递减栈,通过使用单调栈我们可以访问到下一个比他大(小)的元素(或者说可以)。也就是说在队列或数组中,我们需要通过比较前后元素的大小关系来解决问题时我们通常使用单调栈。下面我们通过简单介绍单调减栈和单调增栈问题来进一步说明使用单调栈处理问题的过程。模拟实现一个递增单调..原创 2021-07-31 23:13:51 · 1067 阅读 · 1 评论 -
HDU-5672
解题思路:双指针技巧中的左右指针,确定两个指针,l与r,子串的左边界一旦确定,让 l固定,让r先后移动,直到k个字符出现,r前部分的字符对子字符没有影响,所以从 l 开始的子字符串 为 lenght-r+1,就如此遍历左端点就可以了,将结果累加起来 #include <iostream>#include <stdio.h>#include <stdlib.h>#include <cstring>using namespac...翻译 2021-07-23 19:49:26 · 122 阅读 · 0 评论 -
HDU1559
Sample Input 1 4 5 2 2 3 361 649 676 588 992 762 156 993 169 662 34 638 89 543 525 165 254 809 280Sample Output 2474解题思路 :状态dp[i][j]代表长i宽j的矩阵的元素和。 dp[i][j]=dp[i][j-1]+dp[i-1][j]-ap[i-1][j-1];假设矩阵如下: ...原创 2021-07-23 19:22:17 · 151 阅读 · 0 评论 -
浪漫算法寻找两个单链表的公共起始节点
给你两个单链表的头节点headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。图示两个链表在节点 c1 开始相交:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists一种比较巧妙的方式是,分别为链表A和链表B设置指针A和指针B,然后开始遍历链表,如果遍历完当前链表,则将指针指向另外一个链表的头部继续遍历,直至两个...转载 2021-07-21 18:24:26 · 212 阅读 · 0 评论 -
HDU 5969 最大的位或 【贪心】
Sample Input 5 1 10 0 1 1023 1024 233 322 1000000000000000000 1000000000000000000Sample Output 15 1 2047 511 1000000000000000000原题链接解题思路: 先将数字转换成二进制存储,这时分情况讨论 1,如果两个字符串...原创 2021-07-21 11:24:28 · 68 阅读 · 0 评论 -
java转义字符问题
ava.util.regex.PatternSyntaxException: Unexpected internal error near index 1 \ ^报这个cuo'w原创 2021-06-20 18:38:03 · 562 阅读 · 0 评论 -
流水作业调度 johnson法则
问题描述: N个作业{1,2,………,n}要在由两台机器M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,然后在M2上加工。M1和M2加工作业i所需的时间分别为ai和bi,1≤i≤n。流水作业高度问题要求确定这n个作业的最优加工顺序,使得从第一个作业在机器M1上开始加工,到最后一个作业在机器M2上加工完成所需的时间最少。算法分析:M1作业是连续作业的主要是看M2 ,M2要么空闲,要么作业积压。因此得到一个贪心的性质:让(a,b)中a比较小的尽可能先执...原创 2021-05-13 17:50:37 · 5035 阅读 · 4 评论 -
最小生成树 prim算法
https://blog.csdn.net/hnust_xiehonghao/article/details/38013125帮助理解算法原理输入:无向带权图 G=(v,e),对于每一条边都有权值 e,输出:这个图的最小生成树,即一个连接所有点的树,且权值最小,没有回路设 G=(V,E)是连通带权图,U是V 的真子集。如果(v1,e1)属于E,且v1 属于U,e1 属于 V- U ,且在所有的边里面(v1, e1)权值最小,那么一定存在G的最小生成树prim算法的思路:...原创 2021-05-09 18:28:17 · 455 阅读 · 0 评论