自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

A_Bo的博客

不怕别人比你聪明,就怕别人比你聪明还比你努力

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

原创 插头DP_最小表示法 模板详解

声明模板来自:https://www.cnblogs.com/kuangbin/archive/2012/09/29/2708989.html算法说明如果还不知道插头dp中插头以及轮廓线等概念是什么东西的话,请移步:插头与轮廓线与基于连通性状态压缩的动态规划然后对于什么是最小表示法,请移步:《基于连通性状态压缩的动态规划问题  陈丹琪》那么这里就简单说一下状态的转移:对于m列的格子,用一个m+1的...

2018-04-30 13:05:44 1786 1

原创 最小(大)表示法模板及详解

算法用法最小表示法是我在看插头DP的时候看到的一个名词,就先来看了一下这个算法,还是蛮简单的,有一个首位相连的字符串,我们要寻找一个位置,从这个位置向后形成一个新字符串,我们需要使这个字符串字典序最小。算法解释我们这里要i = 0,j = 1,k = 0,表示从i开始k长度和从j开始k长度的字符串相同(i,j表示当前判断的位置)当我们str[i] == str[j]时,根据上面k的定义,我们的需要...

2018-04-28 16:54:07 4267

原创 AC自动机模板

AC自动机就是Trie字典树和KMP的结合,并且在求解失配指针的时候我们还会用到BFS的一点东西AC自动机是用来求解多模式串匹配的一类算法算法步骤1、根据模式串生成字典树2、根据字典树中的父亲节点关系求解失配指针的跳转3、在字典树以及失配指针的跳转等求解问题简单实现解释1、Trie树的生成时相同的,这里不多做解释,根据前缀建立,只是结构体中会多一个fial指针2、首先我们要知道失配指针指向哪里?以...

2018-04-27 08:37:51 302

原创 Trie字典树模板及栗子

模板Trie字典树大致可以分为两种实现方式,一种是数组,另一种是指针,那么我们就整理了两个模板:数组的实现:#include <iostream>#include <cstdio>#include <string>#include <cstring>#include <algorithm>#include <cmath&g...

2018-04-26 20:28:19 186

原创 状压DP实现顺序枚举 _ POJ 2817

题目链接POJ 2817题目意思有n个字符串,可以以任何一种顺序排列,每相邻两个字符串之间的最长公共子串长度为这两个之间的分数,在每个字符串的前面可以添加任意数量的空格,那么请问最大得到分数是多少?题目解析首先我们看到一个关键字:相邻字符串之间最长公共子串,那么这里就避免不了求解这个东西,我们发现这里n的范围(1 <= n <= 10),并且字符串的长度也不会超过10,那么我们直接枚举...

2018-04-25 18:36:58 337

原创 矩阵连乘实现

给出了一系列矩阵的信息,并且保证他们一定可以进行乘法运算,比如矩阵行列为a、b,另一个矩阵的行列为b、c,那么我们的输入数据就为a b c ,那么两个矩阵相乘的消耗为 a*b*c,那么要求矩阵乘法的的最小花费我们很容易想到这是一个区间的动态规划,和石子归并有些类似,递推公式是相同的,我们用dp[i][j]:从第i个到第j个连乘需要的最小消费,那么我们最终的答案就是dp[1][n],唯一和石子归并不...

2018-04-24 20:47:32 669

原创 状压DP _ POJ 3311

有个人从0出发,然后需要经过所有的点,最终回到起点,问最少需要走的距离为多少,这类问题就被称为旅行商问题当我们的点数不超过16的时候,我们可以使用记忆化搜索+状态压缩的方式来对这类问题进行求解。首先他们给出的两点之间的距离不一定是最短的距离,并且我们这里的点都不会超多16,那么我们就可以使用O(n^3)的Floyd来求解各个点之间的最短路。然后已经访问过的节点S,并且当前所在的顶点为v,那么dp[...

2018-04-24 19:36:59 131

原创 状压DP_ POJ 1185

状压DP中我觉得重要的不是状态压缩,因为状压DP中的状态压缩思路很固定,重点还是在状态之间的转移!并且在状态压缩中的位运算也很重要,也就是如何处理状态之间的关系(如何用位运算计算出来)例如:给你的是01序列,0表示不能取,1表示可取,并且我们要给出的答案中在给的序列取0的位置不能取1,我们要怎么表示这个情况呢?如果我们选择和上面相同的储存方法是不能很好的判断这个关系的,我们可以将0储存为1,1储存...

2018-04-24 16:52:58 117

原创 组合数问题

组合数问题简明的表示就是从n个物体中选出m个,一共有多少种选择,表达式为:我们还可以找到他的递推表达式:我们发现这个递推公式和杨辉三角的递推公式相同,唯一的区别就是没有最前面的那列1,他的表示形式为:那么我们就可以利用这个递推公式来求解一些简单的组合数问题栗子栗子来源:https://www.cnblogs.com/Lanly/p/6126173.html题目大意告诉你组合数公式,其中n!=1*2...

2018-04-21 19:53:03 3760

原创 HUD 4925

题目意思有N*M的一块地,每个里面可以种苹果树(每个涨一个苹果)或者施肥,施肥会对周围四棵果树产量翻倍,如开始只是长一个苹果,一块影响为2,两块影响为4,三块8,四块16,最多就是周围四个都施肥,产量为16问最多可以有多少产量?解析我们发现最多的产量是下面这种形式(1表示种树,0表示施肥):那么这样我们就可以发现,只有四个角上产量为4,除了四个角边上产量为8,中间产量都为16,那么我们还需要特别判...

2018-04-21 15:07:23 157

原创 Wannafly 挑战赛14 A题题解

链接:https://www.nowcoder.com/acm/contest/81/A题目描述在三维空间中,平面 x = 0, y = 0, z = 0,以及平面 x + y + z = K 围成了一个三棱锥。 整天与整数打交道的小明希望知道这个三棱锥内、上整点的数目。 他觉得数量可能很多,所以答案需要对给定的 M 取模。输入描述:输入有 1 ≤ T ≤ 105 组数据。每组数据中,输入两个整...

2018-04-21 13:50:47 262

原创 次小生成树_HDU 4081

题目中的意思是有n个点,给出坐标以及点上的人数,要求我们选出n-1条边,并且在这n-1条边中选出一条边满足  A/B 最大,A:这条边两端人口总数,B:除去这条边之外所有边的长度我们要求解A/B最大,那么我们就要A尽量大,B尽量小,我们首先想到最小生成树,然后枚举每一条边,然后求解我们如果枚举的是最小生成树上的边:(两端人口)/(最小生成树总权值-此条路的权值)如果这条边不在最小生成树上,那么我们...

2018-04-20 11:32:48 203

原创 次小生成树详解及模板(prim 以及 kruskal)

写在前面我们大部分都对最小生成树了解的多一些,一般求最小生成树的算法是prim、kurskal,那么对于次小生成树,我们也可以用上面两种算法来求解算法解释这两种算法的思路都是相同的,首先求出最小生成树,我们枚举每条不在最小生成树上的边,并把这条边放到最小生成树上面,然后就一定会形成环,那么我们在这条环路中取出一条最长的路(除了新加入的那一条边)。最终我们得到的权值就是次小生成树的权值。...

2018-04-20 09:33:13 18250 7

原创 逆元

逆元定义逆元和我们平时所说的倒数是有一定的区别的,我们平时所说的倒数是指:a*(1/a) = 1,那么逆元和倒数之间的区别就是:假设x是a的逆元,那么 a * x = 1(mod p),也就是只多了一个取余的操作,这个取余的操作,就会保证a的逆元不一定只是a的倒数。那么我们的逆元有什么作用呢?并且取余还不满足下面式子:( a/b )%p = (a%p  /  b%p)  %  p ,那么我们如果遇...

2018-04-19 11:18:04 8334

原创 费马小定理

定理解释费马小定理:如果质数p,和满足gcd(a,p) == 1的任意数字a,那么就一定满足下面的式子:证明等这里就不叙述了,想要了解的话可以查看:百度百科:费马小定理应用我们这里就引用一个百度百科中的例子:计算2^100(mod 13)的数值在这个例子中我们知道p = 13,并且p是质数,那么我们就可以去找最大的m值满足:(2^(p-1))^m我们求解到最大的m值为: 100/(p-1)向下取整...

2018-04-18 22:50:42 1463 1

原创 UVA1601 _特殊的建图+双向BFS

程序来自:https://blog.csdn.net/qq_29169749/article/details/51420097题目含义:有1-3个东西用小写'a','b','c'表示,我们需要将他们分别移动到'A','B','C'位置,他们可以同时移动,但是不能相互穿过去,类似于不能从ab ,转换为ba状态,我们要求解的是最小的步数解读:我们直接看这个题的解法:首先是因为每个点有五种操作方式分别是...

2018-04-15 16:41:35 432

原创 POJ 1915_双向BFS

前提使用双向BFS前提是:我们要知道起点和终点的位置,并且这个题要使用BFS求解我们分别从起点和终点开始进行BFS,以起点开始的BFS的将标记数组记为1,以终点开始的BFA标记数组为2,那么当起点的BFS遇到标记为2的点时或者终点为起点的BFS遇到标记为1的点时我们就找到了答案,答案就是两边步数的相加......双向BFS的基本思路是这样的.....下面试程序的实现:#include <io...

2018-04-15 12:25:34 406

原创 UVA 1374 迭代加深搜索

所谓迭代加深搜索实质:限制每一次所搜的最大深度,然后进行dfs深搜,并且我们可以利用节点深度的性质来进行剪枝来优化算法,这个题中:由于深度固定,我们在当前层数上指数是a,最大深度为maxd,当前深度为cur,那么我们接下来几层向下深搜最大只会到达a<<(maxd-cur),以你为向下一层最大就是指数的二倍,那么剩余深度为(maxd - cur)自然而然就是上面答案,那么我们最重要的这一...

2018-04-15 11:28:29 180

原创 2-Sat _ POJ 3678

看这个题的时候让我明白了前面博客中一个不明白的地方,一个关于2-Sat建边的问题,我们在2-Sat建边是,我们所建的边是要求选这个点,那么这个点之后的带你也是一定被选的,比如我们说A和B都是可以去0或1,他们满足A AND B = 1,那么A和B就必须都是1了,我们要怎么表示这个条件呢?我们要连接 A0 -> A1,B0 -> B1,这样我们如果选0的话,我们就必须要选1,那么他两个就...

2018-04-14 20:06:46 202

原创 2-Sat+二分_HDU 3622

HDU 3622题目意思是有n个选择,每次都是只能在两个坐标中选择一个,然后再选择的坐标上画圆,圆不能有重叠部分,问题画的做大的面积是多少题中是两个坐标选一个,然后约束条件就是在当前半径下两个点画圆是否有重叠,所以这是一个2-Sat问题,但是我们的半径应该怎么确定呢?很容易想打二分枚举就好#include <iostream>#include <cstdio>#incl...

2018-04-14 16:34:42 149

原创 2-Sat _ POJ 3027 判断方案可行性

开始根本没看出来这个题是2-Sat,还是水平不够啊,这个题的意思是:一个圆环上有n个点,n个点连m条线,这些线可以在圆内,也可以在圆外,需要我们判断这些线是否满足不相交,那么这些线的选择就只有在圆外和园内两种选择,所以我们在这里可以看到一点2-Sat的影子,但是这里还是缺少限制条件啊,这就要看我们怎么判断相交了,因为要防止他相交,我们就会得到限制条件,所以这就是一个选择线的2-Sat问题。线相交的...

2018-04-14 12:16:45 213

原创 2-Sat模板详解

写在前面这几天看了一下2-Sat,因为有Tarjan以及拓扑排序等等的知识基础,还是比较好理解的,我看到的有两个模板,一个是时间复杂度为O(nm),另一个时间复杂度为O(m),但是第二种存在一种局限,他只是能求解随机的解,但是如果要是求解字典序最小的解,只能使用第一种解法.......模板我们就用一个例子来看一下第一个模板: HDU 1814题目意思:有2*n个人,每两个人一组(1-2一组,3-4...

2018-04-13 18:20:58 683

原创 Educational Codeforces Round 42 (Rated for Div. 2)_A-D题解

A. Equator这个题看了立马就开始写,三四分钟就交上去了,预判正确,当时感觉还挺顺,哈哈......结果后来被人hack了,哇第一题都不对的嘛.....#include <cstdio>#include <ctime>#include <queue>#include <cstring>#include <iostream>...

2018-04-11 22:56:01 227

原创 实用技巧_反转,状态压缩(POJ 3276 POJ 3279)

反转我们枚举每一个长度k,如果这个k大小的区间中第一个是反向的,我们就翻转整个k大小的区间,记录翻转的次数,然后我们还需要一个数表示当前位置翻转的次数-sum,如果翻转奇数并且正向,那么我们还需要翻转他,其余情况也是类似,最后我们判断后面的k-1个朝向,如果都是正向,则返回结果,否则在k情况下无解#include <cstdio>#include <ctime>#inc...

2018-04-10 20:57:18 170

原创 实用技巧_尺取法

参考书籍《挑战程序设计竞赛(第二版)》尺取法就是在一组数据上面反复地推进区间的开头和末尾,来求解满足条件的最小区间的方法。基本上使用尺取法要满足下面的基本条件:如果区间[s,t]已经满足了题目的要求(连续区间),如果从s+1开始找区间的话(假设s+1对应的区间末尾为tt),那么tt一定满足 : tt >= t,只有这种情况下我们才可以只用尺取法。我们就拿书中的一个例子来分析一下:题目描述:给...

2018-04-10 19:29:50 202

原创 石子归并实现及优化

想根据题来说一下式子归并的实现,分别是这三个题......51Nod1021 ,   51Nod1022 ,    51Nod1023我们看第一个题,就是最基本的链式石子归并,在链式石子归并中我们用dp[i][j]:表示从石头i到石头j我们要花费的最小代价,sum[i][j]表示从i到j石头的重量的和,这里就用到了区间dp的思想,我们在一个区间中枚举分别枚举长度,然后再这个某个长度下我们分隔区间,...

2018-04-10 16:26:57 916

原创 Educational Codeforces Round 41 (Rated for Div. 2) _E. Tufurama

大家如果有能力的话,可以看一下当时比赛页面中的题解,当然了题解大部分都会是英文的,比如这个题的首先打开这道题:http://codeforces.com/contest/961/problem/E,然后我们在下面可以看到这个东西:那么这个就是题解了,点进去就可以看到这次题的所有题解以及正确的程序,当然Codeforces上的所有程序以及测试样例也都是公开的,大家也可以在一下大神们的程序,看一下能不...

2018-04-09 17:22:00 409

原创 最小瓶颈路多组查询_LCA+倍增计算(UVA11354)

写在前面前面我们写了一个只有单组查询的最小瓶颈路计算,利用的是Kruskal的贪心策略,将两点连接起来的最后一条边,就一定是我们要求解的答案,这次我们有很多组的询问,如果再次使用上面的方式计算,时间肯定不会允许,因为O(N^2)的查询复杂度就已经够你的程序跑一会的了,我们需要的是更加强大的算法......算法解释我们知道求解LCA的在线算法,就是将这棵树的深度遍历顺序、对应的深度顺序,以及第一次出...

2018-04-09 10:24:05 327

原创 LCA问题在线算法ST算法

写在前面之前我们说过了LCA的离线算法,基于Tarjan算法,Tarjan算法_LCAST算法因为ST算法这个需要了解的东西要比Tarjan的离线算法要高级一些,这个我们需要知道RMQ,不懂的大家可以看一下我的另一篇博客:RMQ问题原理及实现,这里ST在线算法用的是动态规划以及深搜思想我们就开看一个栗子:(图片来自POJ1330)我们要对他从根节点进行深度搜索,我们可以得到下面三个数组:ver数组...

2018-04-08 10:26:15 342

原创 最小瓶颈路含义

写在前面本篇主要是说最下瓶颈路的含义以及如何计算两点之间最小瓶颈路上最大边的长度.......最小瓶颈路含义首先我们要说一下什么是最小瓶颈路,是指两点之间所有路径中最大的边最小的路径(路径由边组成),这个概念还是比较好理解的,我们在这片博客中只是先说他的一种问题,也是最简单的一种问题,就是如何计算两点之间最小瓶颈路上最大边的长度算法说明在看这片博客之前大家要知道Kruskal算法以及并查集的相关内...

2018-04-07 19:13:15 2077

原创 POJ 2299Ultra-QuickSort

题目链接 POJ 2299这个题的大致意思就是:如果将给的顺序转换为有序的话,我们最少需要移动多少次。我们很容易就想到是树状数组求逆序数,但是这个题有点小的技巧,也就是其他博客中所说的离散化,实质就是在使用树状数组求解逆序数时,我们这里需要的空间不是多少数的空间,而是最大数多大,我们就要开多大的空间,(因为逆序数的话,更新的时候实在数字大小的数位上进行加1操作)如果真正理解树状数组求逆序数的话,这...

2018-04-07 16:58:45 172

原创 POJ 1743 后缀数组

这里有一篇论文总结了很多后缀数组的用法,是 《后缀数组——处理字符串的有力工具 》--罗穗骞 里面又很多关于这个后缀数组的具体用法,其中就包括这个不可重叠最长重复子串论文资源:链接:https://pan.baidu.com/s/1X9vxk8QfwupU8U1OgTQBWg 密码:u44p这个题的意思就是求解不可重叠最长重复子串,但是这里有一个问题,他的串中也可以是相似的(每个数之间的差值相同的...

2018-04-07 12:37:59 230 1

原创 POJ 2774 Long Long Message

The little cat is majoring in physics in the capital of Byterland. A piece of sad news comes to him these days: his mother is getting ill. Being worried about spending so much on railway ...

2018-04-05 19:26:38 286

原创 后缀数组实现及模板详解

写在前面首先要知道后缀数组的作用:将字符串的每一个后缀按照字典序进行排序,当然我们还可以进行其他的操作们可以求解相邻两个后缀之间最长的公共前缀的长度(LCP问题)后缀数组首先我们要明白基数排序,如果不明白的话可以看一下我的另一篇博客:基数排序的实现当我们明白了基数排序之后,我们就可以看一下后缀数组的模板了://不怕别人比你聪明,就怕别人比你聪明还比你努力#include<iostream&...

2018-04-05 17:39:09 855

原创 RMQ问题原理及实现

写在前面        首先我们要明白RMQ表示的是什么:Range Minimum/Maximum Query(区间最小值/区间最大值),这里我们主要介绍的一种算法是ST算法,他预处理的复杂度为O(nlogn),查询复杂度为O(1),主要基于的思想就是动态规划。RMQ问题算法详解        我们知道这个算法是基于动态规划来进行的,我们就要首先说一下状态转移方程,我们定义:dp[i][j]:从...

2018-04-02 18:44:59 595

原创 基数排序的实现

写在前面        今天开始学习后缀数组,发现了这个神奇的基数排序,之前只是在数据与结构上了解了基数排序的实现原理,但是对于程序怎么实现到现在还是不知道,但是还是想写一篇关于后缀数组的博客,所以就从这里开始写起吧,我们重点是在程序的实现上,原理等的内容只是提一下。实现原理        基数排序的原理:首先根据个位上的数字将数组进行排序,将他们分配到0-9号桶中,然后我们将桶中的数...

2018-04-02 17:54:02 1609 2

空空如也

空空如也

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

TA关注的人

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