自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ACM算法日常

专注于基础算法的研究工作,深入解析ACM算法题,五分钟阅读,轻松理解每一行源代码。内容涉及算法、C/C++、软件设计等。

  • 博客(41)
  • 收藏
  • 关注

原创 新手入门 | 算法书籍推荐

算法书籍 公众号设立以来,很多同学都在问如何入门、提高,以及有什么好的算法书籍可以学习。这周空闲时间我就大概在网上整理了一下,由于每个人的性格、学习习惯都不一样,不能针对个人情况来推荐,所以这里给的算法书籍仅做参考哦。 另外需要注意的是,这里给的书籍路线更偏向于普通意义的学习,而不仅仅是针对算法竞赛,公众号前期还是主要针对大学刚入门的同学,这样对于...

2018-08-19 14:23:40 36653 3

原创 Leetcode 周赛题解 215

今天的leetcode最后一题是动态规划,比较难,适合对DP比较熟练的童鞋去完成,讲起来也比较费劲,这里就只讲下第二道和第三道题,第一道水题略过。5603. 确定两个字符串是否接近题目内容:如果可以使用以下操作从一个字符串得到另一个字符串,则认为两个字符串 接近 :操作 1:交换任意两个 现有 字符。例如,abcde -> aecdb操作 2:将一个 现有 字符的每次出现转换为另一个 现有 字符,并对另一个字符执行相同的操作。例如,aacabb -> bbcbaa(所有 a 转化为

2020-11-23 08:58:19 5

原创 Leetcode 周赛题解 216

leetcode 第 216 场周赛5605. 检查两个字符串数组是否相等题意给你两个字符串数组 word1 和 word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false 。数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。示例1:输入:word1 = [“ab”, “c”], word2 = [“a”, “bc”]输出:true解释:word1 表示的字符串为 “ab” + “c” -> “abc”word2 表示的字符串为 “a”

2020-11-23 08:55:05 9

原创 Effective C++条款3 我可以不使用const?

前言const是C++中用得非常频繁的一个关键字,但是如果你不使用这个关键字,对程序的运行结果可能影响不大,那么,我可以不使用const吗?一开始,拒绝使用const的最大原因可能是认为这个关键字比较鸡肋,因为它不会对程序产生实质影响,而且很繁琐,变量加上const关键后只能调用const类型的函数,极不方便。但是为了安全,推荐使用const,这是一个良好的习惯,坚持下去的结果是你的代码将变得更加健壮,当然你也可以不使用const,只不过当代码量到一定程度后,你的代码可能会变得比较脆弱,而且随着量级

2020-10-11 21:59:36 16

原创 如何准备信息学算法竞赛? ——我是如何赢得美国信息学奥林匹克竞赛3届金牌的

如何准备程序竞赛?我是如何赢得美国信息学奥林匹克竞赛3届金牌的作者:Andrei Margeloiu,2017 Google HashCode竞赛金牌获得者高中第一年,我从0开始学习了C++。一开始我对编程、算法和数据结构一无所知,几个月之后我才开始写代码,当时计算机信息学奥林匹克竞赛来了,正好我可以试试我的学习方法是否有效。经过2天的比赛,我赢得了金牌。我很震惊,因为我超过了有5年经验的参赛人员,我知道我很努力,但是这个成绩超出了我的期望。这个比赛很适合我,我也因此全心参与其中。我知道是什么

2020-08-11 20:45:38 2781

原创 最短路专题2 | CodeForces 449B - SPFA算法

深入解析SPFA最短路算法及优化,最短路算法系列文章

2019-12-25 08:26:27 789

原创 最短路专题1 | CodeForces 601A - 混合Dijkstra算法

最短路专题1 | CodeForces 601A - 混合Dijkstra算法前言这个十一没有出去玩,花了一些时间在写之前提过的markdown编辑器,本文就是用这个编辑器写的2333,今天准备写咱们的新专题 — 最短路。另外之前提过专题的题目主要使用kuangbin系列,现在改变主意了,专题题目全部使用CodeForces上的题目,原因主要是POJ等国内的OJ系统不能看源代码,而且题目质量稍...

2019-11-27 08:42:02 955

原创 一个新的markdown编辑器

前言最近一段时间没有更新文章,因为业余时间都在写一个markdown编辑器。市面上有很多各种各样的编辑器,但是或多或少存在一些问题,对于一个轻度强迫症患者而言,在使用了一些编辑器后,还是转为自己手写了一个简单的markdown编辑器。不同的markdown编辑器比较个人感觉使用最方便的编辑器是Typora,因为是实时编辑和预览的,也就是说,不需要额外的预览界面。但是Typora也存在一些问题...

2019-10-27 14:33:23 746 1

原创 DP专题9 终 | 机器人 HDU -4576(概率DP)

本篇是一个概率DP问题,也是DP专题的最后一篇,概率DP是DP中一个较为特殊的算法问题,混合了概率这个元素在里面,需要对概率有比较好的理解。概率DP问题很多时候会和复杂的概率计算混合在一起,要想更好的掌握只能多做相关题目,熟练掌握概率相关的知识也是很重要的一步。概况DP是混合了概率计算和DP结构的一种算法。本篇是一个入门题目,希望能够让没接触过概率DP的同学有个简单了解。...

2019-08-21 21:59:25 910 1

原创 DP专题8 | 骨牌摆放问题 POJ 2411(状态压缩DP)

题目:给你n*m(1<=n,m<=11)的方格矩阵,要求用1*2的多米诺骨牌去填充,问有多少种填充方法。比如下图是对于如下2x6的方格矩阵,可能的填充方案之一。该如何使用动态规划的方式解决这道题呢?先了解一下状态压缩算法。状态压缩通常是使用一个整数来表示一个集合,比如整数3,二进制表示为11,第一位状态为1,第二位状态为1,数字2的二进制表示为...

2019-08-06 22:07:53 2611

原创 DP专题7 | 没有上司的舞会 洛谷1352(树形DP)

本篇继续咱们的DP专题,树形DP入门。动态规划每一个类型的DP都是深坑,期望童鞋们自己在这个系列的基础上多花时间进行拓展,学习愉快~在讨论树形DP之前,我想介绍一个比较有名的学习技巧——费曼技巧,因为个人觉得可以尝试着用在咱们的算法理解上。费曼这个人本身是一个很有意思的人,做科研和教育都非常厉害,另外后人还根据他的个人经历拍了一部爱情片,是不是跨越有点大,好了,先说费曼定理。...

2019-07-25 21:24:38 1313

原创 DP专题 6 | 石子合并 CH5301(区间DP)

欢迎回来~继续我们的DP专题,上一篇我们讲了一个较为复杂的线性DP问题,这一次让我们看一看区间DP问题。区间DP直观上可以理解成对于一个区间计算最优解的问题。先来看下本题的题目,直接上中文。题目大意:设有N堆沙子排成一排,其编号为1,2,3,…,N(N<=300)。每堆沙子有一定的数量,可以用一个整数来描述,现在要将这N堆沙子合并成为一堆,每次只能合并相邻的两堆,合并的代...

2019-07-22 21:02:37 2912

原创 DP专题 5 | 颜色的长度 - UVA1625(线性DP)

【题意】输入两个长度分别为n和m的颜色序列(n,m<=5000),要求按一定规则合并成一个序列,规则是每次可以把一个序列开头的颜色放到新序列的尾部。例如对于序列GBBY和YRRGB,它们可以合成很多中结果,其中包含这样两种结果,GBYBRYRGB和YRRGGBBYB,对于每个颜色c来说,其跨度L(c)等于新序列中颜色c出现的最大位置和最小位置之差,比如对于上面的两种结果,每个颜色的L(...

2019-07-17 21:21:30 3349

原创 DP专题 4 | 骨头收集爱好者 - POJ 1458( 0-1背包)

背包问题是DP里面变化比较多的问题,可以参考网上的《背包9讲》,另外还是阅读《算竞入门》和《算竞进阶》,讲的最全的肯定是背包9讲,基本上把所有变形都讲了一遍,但是把问题讲的最清楚应该还是算竞进阶,特别是本篇的0-1背包。进阶里面比较清晰的讲解了如何从二维数组变成滚动一维数组,讲解了为什么一维数组是倒序,而二维数组是顺序。进而也能很清晰的讲解完全背包问题。OK,还是回到DP的转移...

2019-07-14 16:28:15 1108

原创 DP专题 3 | LCS最长公共子序列 - POJ 1458

Common Subsequence(公共子序列问题)DescriptionA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = < x1, x2, ..., xm > another...

2019-06-21 09:39:01 2439

原创 DP专题 2 | LIS最长上升子序列 - POJ 2533

这篇来看LIS~上题。POJ - 2533 Longest Ordered SubsequenceDescriptionA numeric sequence ofaiis ordered ifa1<a2< ... <aN. Let the subsequence of the given numeric sequence (a1,a2, ....

2019-06-13 19:32:41 3939

原创 DP专题 1 | 数字三角形 - POJ 1163

从本篇开始,准备做一系列的专题讲解,主要参考《算法竞赛入门经典》、《算法竞赛进阶指南》两本书。主要是为了能够更加系统的讲解各个知识点,这两本书已经讲得很好了,建议准备ACM学习以及想深入学习算法的同学购买。每一个专题都会持续比较久的时间,就比如拿动态规划DP来说,种类非常多,从浅入深可以说是一次深潜,刚开始可能还好,后面会比较困难~另外本号的更新频率一般是一周2-3篇,关注本号的童鞋...

2019-06-12 15:57:40 3256

原创 流问题Flow Problem(网络最大流)- HDU 3549

        网络最大流问题属于算法 里面较难的问题,因为牵涉的概念比较多,这一篇可能需要你花比较多的时间去理解,除了看这个,最好能多参考别的书籍或者文章进行比较学习,不然可能容易产生理解的偏差。         另外本公众号并不打算讲解过于复杂的问题,网络流问题已经严重超过了最初设想的五分钟限制,不过由于是第一篇网络流的题目,可以作为后面相关问题的基础,姑且多写点。如果你觉得一次难以看...

2018-12-26 11:48:59 4948

原创 独角兽与数列(置换群循环)- HDU 4985

群论是法国数学家伽罗瓦(Galois)的发明。伽罗瓦是一个极具传奇性的人物,年仅21岁就英年早逝于一场近乎自杀的决斗中。他用该理论,具体来说是伽罗瓦群,解决了五次方程问题。在此之前柯西(Augustin-Louis Cauchy),阿贝尔(Niels Henrik Abel)等人也对群论作出了贡献。 群是 集合G+运算符·,它结合任何两个元素a和b而形成另一个元素,记为a·b。符号"·"是...

2018-12-01 18:02:58 5278 1

原创 寻找整数(容斥原理) - HDU 1796

        看这题之前先复习一下容斥原理,不然肯定看不懂,呃,如果第一次接触容斥原理的题,可能弄懂了容斥原理你还是看不懂代码,是的,等会你就知道了。                容斥原理简介:在计数时,为了使重叠部分不被重复计算,人们研究出一种新的计数方法:先不考虑重叠的情况,把包含于某内容中的所有对象的数目先计算出来,然后再把计数时重复计算的数目排斥出去,使得计算的结果既无遗漏又无...

2018-11-20 15:14:54 3817

原创 算法合集 | 无限的路(递推) - HDU 2073

       递推和递归有着很多的相似之处,甚至可以看做是递归的反向。递归的目的性很强,只解需要解的问题,递推有点“步步为营”的味道,不断的利用已有的信息推导出新的东西,而递归是构造出了一个通过简化问题来解决问题的途径。 递推在组合数学中有着典型应用。         本题是递推的示例题,之前算法合集(点击菜单)还有一些部分没有完成,后面还是接着一点点的完善! Problem De...

2018-11-16 18:59:31 3174

原创 朋友圈(拉姆齐定理)- HDU 6152

拉姆齐Ramsey定理是一个稍微难于理解的定理,该定理又称拉姆齐二染色定理,是要解决这样的问题: 要找这样一个最小的数 R(k,l)=n,使得 n 个人中必定有 k 个人相识或 l 个人互不相识。  比如本题中的R(3,3) = 6,有3个人认识或者3个人互不认识,最小的数是6个人。6个人中必有3个人相互认识或者相互不认识。 证明并不难,采用二染色方法比较直观的来看看吧...

2018-11-13 21:43:49 7449

原创 四两拨千斤,GCC编译器(同余模) - HDU 3123

对于两个数M和N,如果M%P == N%P,则可以说M和N对P同余。记作公式:M≡N(modP)同余这一属性看起来简单,然而却是数论中极为重要的概念。与之相关的公式和定理更是纷繁芜杂,如果不是数学背景的童鞋,恐怕很难深入去钻研所有的知识。我们这一篇作为一个简单的入门,用同余公式来解决一个阶乘问题。在做题之前,先来熟悉一个简单的公式:(M+N)%P=(M%P+N%P)%P(M+...

2018-11-06 08:36:16 4165

原创 海战(线段树)- HDU 4027

        这一篇是典型的线段树算法,这个算法在日常工作中可能非常少见,因为可以被常规算法所取代,但是在问题达到一定数量级之后,常规算法是很难搞定类似问题的,可以说线段树是高级算法中非常低调的一种,也许在某些关键时刻能让你化险为夷。        线段树简单的说就是对一个序列每次从中间划分为2个区间,然后依次划分子区间。如图:        先看下维基百科的说明:       ...

2018-10-24 11:30:20 2995

原创 一次看懂进制转换(阶乘是关键) - HDU 2031

        说起进制转换,最常见的莫过于十进制与二进制的转换操作,因为经常要进行位运算,位运算性能一般都会优于整数运算,对于追求性能的童鞋不可谓不争之地。        对于二进制的转换,我们通常有这样的公式,例如对于一个二进制111001,转换为十进制\(x\):$$x = 1\times2^5+1\times2^4+1\times2^3+0\times2^2+0\times2^1+...

2018-10-14 21:29:25 3080

转载 连连看游戏消除算法

今天在收到一道的面试题,觉得比较有意思,决定记录下来,整个题目与解答过程大概如下。连连看是一种很受大家欢迎的小游戏。下面四张图给出了最基本的消除规则:图 A 中出现在同一直线上无障碍的圈圈可以消除;图 B 中两个圈圈可以通过一次转弯消除;图 C 和图 D 中,两个圈圈可以通过两次转弯消除。已知以下接口,表示位置(x, y)上有无障碍物:int isBlocked(int x,...

2018-10-09 15:47:52 8677 3

原创 勇者游戏(巴什博弈)- HDU 1846

博弈算法中比较经典的一个博弈问题是巴什博奕,巴什博弈是这样的: 有一堆物品,数量为n,两个人轮流取,规定每次最多取m个,最少取1个。 我们定义先取者为F(first),后取者为S(second) 网上讲的很多不是很容易理解,我来讲一个非常容易理解的思路。 推理1:显然,如果n=m+1,那么由于一次最多只能取m个,所以无论F拿走多少个,S都能够一次拿走剩余的石子,S取...

2018-09-24 10:33:59 2559

原创 涂色游戏Flood-it!(IDA*算法) - HDU 4127

做题之前,可以先到下面这个网站玩一会游戏:https://unixpapa.com/floodit/?sz=14&amp;nc=6 游戏开发里面,比较常用的一个搜索算法是寻路算法,寻路算法里面用的最多的是A*算法以及很多优化的A*算法,对于只有4个方向的寻路算法,之前在网上见到有A*的位运算优化,性能非常高,1ms能处理上百个格子的地图寻路!很多MMORPG网络游戏都会应用这些算法,如...

2018-09-19 15:40:39 3834

原创 算法合集 | 神奇的笛卡尔树 - HDU 1506

原文地址:https://cs.v8cloud.cn/article.html?blog_id=225        笛卡尔树是一个很有意思的树形结构,因为它同时满足两个性质,从key(key就是索引位置,如下图中9的key为1,3的key为2......)来看,满足二叉搜索树的特性,从value来看,满足堆的性质。         重点参考下图,图片来自维基百科,还算是能够比较形象的...

2018-09-12 14:36:55 9041 3

转载 什么才算是真正的编程能力?

计算机科学有两类根本问题。一类是理论:算法,数据结构,复杂度,机器学习,模式识别,等等等。一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等等。理论走的是深度,是在追问在给定的计算能力约束下如何把一个问题解决得更快更好。而系统走的是广度,是在追问对于一个现实的需求如何在众多的技术中设计出最多快好省的技术组合。搞ACM的人,只练第一类。像你这样的更偏向于第二类。其实挺难得...

2018-08-29 14:10:10 2087

转载 浅谈ACM算法学习与有效训练

一、什么是有效地训练?  很多ACMer入门的时候,都被告知:要多做题,做500多道就变牛了。其实,这既不是充分条件、也不会是必要条件。   我觉得一般情况下,对于我们普通学校的大学生,各方面能力的差距不会太大,在这种情况下,训练和学习的方法尤为重要。  其实,500题仅仅是一个标志,而且仅仅表示你做ACM-ICPC有一定的时间,算是入门了吧,而且这500道题目中自己独立思考做出来的有多...

2018-08-25 15:36:37 10404 7

转载 新手如何学习算法?算法如何入门以及零基础入门算法应该学些什么?

搬运工,看到一篇关于算法学习之路的总结,希望对你有帮助。原文链接:zh.lucida.me/blog/on-le我的算法学习之路MAY 4TH, 2014 | COMMENTS 关于严格来说,本文题目应该是我的数据结构和算法学习之路,但这个写法实在太绕口——况且CS中的算法往往暗指数据结构和算法(例如算法导论指的实际上是数据结构和算法导论),所以我认为本文题目是合理的。原文作者:...

2018-08-18 20:08:42 22186 10

转载 程序员必须掌握哪些算法?

算法图搜索 (广度优先、深度优先)深度优先特别重要 排序 动态规划 匹配算法和网络流算法 正则表达式和字符串匹配数据结构图 (树尤其重要) Map 堆 栈/队列 Tries | 字典树额外推荐贪婪算法 概率方法 近似算法上面是 Arjun Nayini 的推荐,下面是 Ken George 的推荐注:下面这个没有特定优先级算法:三路划分-快速排序...

2018-08-14 08:16:15 2953

转载 推荐|10本不得不看的算法书籍,挖掘数据的灵魂!

全球人工智能:专注为AI开发者提供全球最新AI技术动态和社群交流。用户来源包括:北大、清华、中科院、复旦、麻省理工、卡内基梅隆、斯坦福、哈佛、牛津、剑桥等世界名校的AI技术硕士、博士和教授;以及谷歌、腾讯、百度、脸谱、微软、华为、阿里、海康威视、滴滴、英伟达等全球名企的AI开发者和AI科学家。文章来源:云栖社区 作者:薯条酱我们都知道对于软件而言,最为经典的定义就是程序=算法+数据结构,算...

2018-08-10 14:49:29 43514 3

转载 C++萌新到大牛,要看哪些书?

初级阶段:1. C++基础语法:《C++ Primer 第五版》C++语法太过繁杂,很多语法特性一辈子也用不上。对于初学者来说,学完前7章就能写简单的程序。 2. 数据结构和算法:《大话数据结构》这实在是一本对新手非常友好的书,暂时先看完前5章就够了。此时应该多做一些练习,可以是简单的小软件或小游戏。 3. C++标准库:《C++ Primer 第五版》没错还是这本...

2018-08-10 09:54:49 7152

转载 不想通这些道理,只能一辈子做低级码农(一)——学算法有什么用

“算法都是封装好的,学了有什么用?”,这是几年前一个试用期员工问我的问题。 他有一年工作经验,基础一般跟过几个项目,属于可以干活的人。来了以后就问我,要快速提升应该学什么。面试的时候觉得他算法功底不太好,就推荐他把算法好好学一学。结果他反问:“算法都是封装好的,学了有什么用?”。 一直认为算法是编程的基础,学好算法是毫无疑问的事情。就好像学写字就要把横竖撇捺学好一样,但被人问起来,...

2018-08-07 14:05:47 8846 7

转载 编程能力主要是算法吗?

作者:何钦尧链接:https://www.zhihu.com/question/53611840/answer/138253503来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 不。编程是一个系统的工程,其中包含非常多种方面的能力。而对于编程所要解决的不同类型的任务而言,所需要的能力的侧重点也完全不一样。如果要列举一下的话,我认为至少有如下。编程的思...

2018-08-01 11:35:24 2191

转载 大公司笔试面试有哪些经典算法题目?

作者:Zack链接:https://www.zhihu.com/question/19805213/answer/61231892来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 首先,强烈建议采用“题海战术”。今年面了数十家公司,大部分题目也都是原题。那么题库在哪里呢?按照循序渐进的原则,一一介绍:1. cc150,全名cracking the cod...

2018-07-31 16:38:49 1260

转载 怎样学算法?

作者:小白链接:https://www.zhihu.com/question/19981544/answer/29645400来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 建议千万不要一开始就看《算法导论》,这本书有太多关于算法的数学证明(如果你喜欢这种,那么你就看这本)我强烈推荐你看看这本:算法(第4版) (豆瓣),作者是高德纳的学生:塞奇威克 ...

2018-07-27 15:30:47 498 4

转载 人工智能深度学习绘制二次元萌妹子头像

转载自知乎:https://zhuanlan.zhihu.com/p/39135876AlphaGo战胜了全世界所有最强旗手,掀起人们对人工智能(AI)的狂热关注。AlphaZero只通过34小时训练,战胜了战胜所有人类王者的AlphaGo。以比特币代表的区块链技术,引发了人们对新一代互联网革命的运动。——人工智能+区块链,两大顶尖技术联起手来,打破了二次元人口结界。 GA...

2018-07-18 08:04:12 3558

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除