
ACM/ICPC算法讲解
文章平均质量分 77
ACM/ICPC算法讲解。
你有多高
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STL 中栈和队列的使用方法
STL 中优先队列的使用方法(priority_queu)基本操作:empty() 如果队列为空返回真pop() 删除对顶元素push() 加入一个元素size() 返回优先队列中拥有的元素个数top() 返回优先队列对顶元素在默认的优先队列中,优先级高的先出队。在默认的int型中先出队的为较大的数。使用方法:转载 2017-05-13 09:48:51 · 417 阅读 · 0 评论 -
动态规划详解
对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第一次接触的时候总是想不通为什么这种方法可行,这篇文章就是为了帮助大家理解动态规划,并通过讲解基本的01背包问题来引导读者如何去思考动态规划。本文力求通俗易懂,无异性,不让读者感到迷惑,引导读者去思考,所以如果你在阅读中发现有不通顺的地方,让你产生错误理解的地方,让你难得读懂的地方,请跟贴指出,谢谢!转载 2017-05-13 09:21:54 · 465 阅读 · 0 评论 -
快速读入模板使用
acm算法竞赛快速读入先上代码:namespace IO { const int MT = 5e7;// 额外内存占用 char buf[MT]; int c, sz; void begin() { c = 0; sz = fread(buf, 1, MT, stdin);// 输入内容一次性读入 }原创 2017-11-18 10:57:39 · 1798 阅读 · 0 评论 -
miller_rabin素数检测总结
miller_rabin素数检测 今天学习了一下miller_rabin素数检测 稍微总结一下首先用到两个定理1、费马小定理假如p是质数,且gcd(a,p)=1,那么a(p-1)≡1(mod p),即:假如a是整数,p是质数,且a,p互质(即两者只有一个公约数1),那么a的(p-1)次方除以p的余数恒等于1。原创 2017-10-18 21:44:54 · 788 阅读 · 0 评论 -
前缀表达式、后缀表达式和中缀表达式的计算(double型)
有关中缀表达式的计算以及中缀表达式与前缀表达式、后缀表达式之间的转换 后续文章会继续给出这里只讲前缀表达式与后缀表达式计算的实现方法前缀表达式 计算方法: 将得到的字符串处理为只含有数字和运算符 将处理后的字符串从前到后压如栈S1中将栈S1中的元素逐个弹出若弹出元素判断为数字 压入栈S2中若弹出元素判断为运算符原创 2017-06-09 17:25:48 · 2299 阅读 · 0 评论 -
用n种颜色给正方体着色共用多少种不同的着色方案
用n种颜色给正方体着色共用多少种不同的着色方案根据Polya定理可求得(Polya定理可自行百度)原创 2017-08-29 20:41:32 · 3349 阅读 · 0 评论 -
扩展欧几里得算法
我们要学习扩展欧几里得算法首先必须知道什么是欧几里得算法 然后再去理解扩展欧几里得一、什么是欧几里得算法其实欧几里得算法我们很熟悉只不过我们并不知道它还有这样一个名字 很简单 其实它就是我们平时所说的辗转相除法求最大公因数 这下就在熟悉不过了吧(不知道什么是辗转相除法!!! 没办法 去找度娘吧)其计算原理依赖于下面原创 2017-05-31 12:47:19 · 745 阅读 · 0 评论 -
最长回文子序列
本文主要介绍最长回文子序列的动态规划算法及其优化 最长回文子序列:顾名思义最长回文子序列首先它是一个串的子序列 其次它是回文的 再次它是回文子序列中最长的 在这里要区别于最长回文子串当然 本问题可以用枚举解决 这里并不叙述 主要讨论一下动态规划来解决还好了 其实很简单 类似于最长公共子序列原创 2017-09-04 20:28:24 · 404 阅读 · 0 评论 -
树状数组实现 区间修改+区间查询
树状数组的本职:单值修改+区间查询对于区间修改 首先想到的就是线段树 可是线段树的代码太tm长了 是真的懒得写 然后就学习了一下如何用树状数组实现 区间修改+区间查询原创 2017-08-04 20:17:12 · 2168 阅读 · 0 评论 -
矩阵快速幂中矩阵的构造技巧
简单的例子Fibonacci数列考虑Fibonacci数列, F(n)=F(n−1)+F(n−2)将右边两项看做是一个列向量的形式,令 Xn−1={Fn−1Fn−2}很容易得到Xn的形式,即 Xn={FnFn−1}现在的任务就是找到一个系数矩阵A,使得AXn−1=Xn,且A需与n无关。 如果能够找到这个A,则易知An−转载 2017-08-11 10:55:42 · 601 阅读 · 0 评论 -
并查集详解
并查集是我暑假从高手那里学到的一招,觉得真是太精妙的设计了。以前我无法解决的一类问题竟然可以用如此简单高效的方法搞定。不分享出来真是对不起party了。(party:我靠,关我嘛事啊?我跟你很熟么?)来看一个实例,杭电1232畅通工程首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点转载 2017-05-13 12:37:24 · 324 阅读 · 0 评论 -
四种博弈浅谈(巴什博弈、威佐夫博弈、妮姆博奕、斐波那契博弈)
巴什博弈一堆 n个物品 两人轮流从中取物品 每人至少拿一个 最多拿m个 将这堆物品最后取完的是winner先手胜利条件------------- n%(m+1)!=0谁面对 (m+1)*k 的情况谁就输了(k为正整数)#include int main (){ int n,m; while (scanf("%d%d",&n,&m原创 2017-06-08 20:43:58 · 2318 阅读 · 0 评论 -
快速幂
快速幂 顾名思义 就是快速求幂的方法 再通俗的讲就是求 a^b 的快速方法通常情况我们求a^b 就是求b个a相称 时间复杂度为O(n) 看起来已经很快了 只需遍历一遍就能求出结果 但是 这依旧不能满足我们的需求 我们希望有更快的方法来求得 a^b 结果 所以就有了快速幂首先它的 时间复杂度是O(log₂N)方法是 将b转原创 2017-05-13 12:38:41 · 573 阅读 · 0 评论 -
最长公共子序列
一个数列 如果分别是两个或多个已知数列的子序列且是所有符合此条件序列中最长的则称为已知序列的最长公共子序列。首先 给出最长公共子序列的状态转移方程 dp[i][j] = 0 如果i=0或j=0dp[i][j] = dp[i-1][j-1] + 1 如果X[i-1] ==Y[i-1]dp[i][j] = max{ dp[i-1][j], dp原创 2017-05-13 11:18:39 · 370 阅读 · 0 评论 -
最大子段和
问题: 给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n 例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-原创 2017-05-13 11:08:44 · 388 阅读 · 0 评论 -
动态规划初步( 01 背包、完全背包、多重背包)
有关动态规划的问题是一个重点,也是一个难点。一开始不知道如何插手的我在学长的建议和相关资料的帮助下,对于动态规划的学习我选择了从较为简单的背包开始。01背包 给定一个容积为c的背包,去尝试装n个重量为wi、价值为vi的物体,求能装下的物体的最大价值。例如,当n=3,c=30,W[]={16,15,15},v={45,原创 2017-05-13 10:54:36 · 804 阅读 · 0 评论 -
回溯法
回溯法 可以用来对问题的空间解进行搜索 回溯法将问题的所有可能解构成树 然后用dfs 进行搜索 遍历每种解的情况 找到符合要求的解 回溯法的基本格式 :void dsf(参数) { if(边界,结束条件) { 操作; return ; } if(条件原创 2017-05-13 09:32:14 · 492 阅读 · 0 评论