自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(107)
  • 收藏
  • 关注

原创 浅谈Meet in the middle

Meet in the middle 算法是一种在搜索类问题中常用的技巧顾名思义这种算法就是同时从两个点往中间搜索,直到碰头为止看两个图我们假设一个情景,图一中标红的两个点分别是起点和终点,现在我们要找出一条从起点到终点的路径。按照传统的BFS思路,我们从上方的起点开始往下搜索,每次拓展相邻的节点。这样我们就需要遍历大部分的节点才能找到答案,搜索树十分庞大而当...

2019-07-01 15:41:11 2632

原创 最小生成树算法

Prim普里姆这种算法有些类似dijkstra,每次取出最近的一个节点拓展出去,直到所有节点都在一个连通块中为止同样的,prim算法也可以使用堆优化。这和dijkstra是一个道理例题Description八中草坪上有N个水龙头,位于(xi,yi)求将n个水龙头连通的最小费用。任意两个水龙头可以修剪水管,费用为欧几里得距离的平方。校长只愿意修费用大于等于c的水管。In...

2019-06-18 21:04:24 264

原创 【图论】找直径

树的直径给定一个树,树中每条边有一个权值,树中两点间的距离定义为连接两点的路径边权之和。树中距离最远的两个点间的距离被称为直径,连接这两个点的路径被称为最长链,也可以说是直径。也就是说直径是一个数值概念,但同时也可指一条路径。直径可能不唯一。我们一般认为这样一棵树是一棵带权无根树,即带权无向图。求一棵树的直径一般来说,树的直径有两种求法。方法一:树形DP求树的直径我...

2019-06-02 21:57:12 960

原创 最短路算法合集

单源最短路问题单源最短路问题是指:求源点到图中其余各顶点的最短路径。这类问题如果使用DFS求解效率会很慢,而使用BFS就多了一个边权为一的限制,否则就会出错于是乎就有了单源最短路径算法Dijkstra单源最短路径算法算法主要流程我们用dis[ i ]表示从源点 s 到节点 i 的最短路径,dis[ s ] = 0;1.找到距离源点最近的一个节点v,放入集合U。2....

2019-05-30 21:05:23 316

原创 【移动类DP】【强烈推荐】数字三角形系列

说在前面虽然我也不知道为什么会有这个系列,但是这个系列真心不错,值得练练建议食用使用方法:先自行刷题,再OJ上提交,实在不行看题解ps:入门OJ部分题目需注册后才能显示。实在不行就用这里的题干做,再用题解里的标程和自己的一起跑一跑T1:题目链接Description73 88 1 02 7 4 44 5 2 6 5(Figure 1)Figure 1 shows...

2019-05-30 09:29:53 263

原创 浅谈状态压缩DP

状态压缩DP,也就是俗称的状压DP,是一种利用二进制来描述状态的DP。这类DP一般状态数较大,如果直接存可能会爆空间,而使用状态压缩就不会有任何问题。只需要一个大小一般的十进制数就可以描述原本很复杂的状态。举个例子,如果我们要描述一块n * n的农田的使用情况设n = 9那么我们就可以用一个九位的二进制数来描述一行的状态。可以令1表示已使用,0表示未使用这样我们只需要最多2 ^...

2019-05-24 21:16:59 487

原创 浅谈二分答案

举个例子:对于一些问题,它的解满足单调性,即如果x满足条件,则对于任意的 i ( 1<=i<=x) 或 (x <=i <=n) (假设1和n是答案的上下界)都会满足条件。一般遇上这种问题,我们就可以用二分答案来解决。在不知道二分答案这个东西的时候,我们会这样写:for (int i = 1; i <= n; i++) { if (!check(i...

2019-05-22 20:50:44 185

原创 迭代加深搜索

DFS迭代加深在做题中我们经常会遇到用BFS存不下状态,DFS又容易挂的情况,这个时候我们可以考虑把它们两者的优点结合起来。BFS常用于找最优解,缺点是需要存下所有状态;而DFS所需空间小,但有可能会“误入歧途”浪费很多时间。比如这个:迭代加深简单来说就是每次限定搜索的深度,如果搜索到了限定深度就return;int maxdep;for (maxdep = 1; maxd...

2019-05-15 11:38:01 1452

原创 关于树

树是由一个集合以及在该集合上定义的一种关系构成的,集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构,在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点。树的一些名词节点的度:一个节点含有的子树的个数称为该节点的度;叶节点或终端节点:度为0的节点称为叶节点;非终端节点或分支节点:度不为0的节点;双亲节点或父节点:若一...

2019-05-05 10:32:15 207

原创 浅谈LCA(最近公共祖先)

LCA,全称Lowest Common Ancestor,也就是我们常说的最近公共祖先,即在一个有根树中,两个结点公共祖先中最近的那个,非常地通俗易懂。。举个例子:以4,5两个结点为例,他们的公共祖先有1,2,2相对来说要近一些,所以lca(4,5)= 2。怎么实现呢?最笨最粗暴的方式就是:若两结点在同一深度,那么两点同时往上走,直到走到相同的点为止;反之,就先把更深的那个...

2019-05-03 20:33:55 556

原创 关于优先队列

优先队列呢,跟单调队列很像,顾名思义就是一个会自动排序的具有队列特性的数据结构,使用这个数据结构是为了找到队列中优先级最高的元素。ps:优先队列会收下每个输入的元素,而单调队列会舍弃一些不合法的元素以达到优化的目的。使用单调队列是为了让整个队列中的元素保持单调。区别不是特别大,主要根据题目选择。如果按我自己的理解呢,优先队列就是个堆,只不过不需要我们去手写,同时也只具备堆的一部分特性。使用...

2019-04-29 22:18:04 202

原创 关于堆(heap)

说在前面我第一次接触堆这个东西是在做堆排序的时候。这玩意还不错,难度也不大,可以用的地方很多,值得玩一玩。前置知识:完全二叉树完全二叉树 ,顾名思义是一种二叉树就是说 (假设树根深度为1 )深度为k的二叉树 ,第1至第k-1层的结点都是满的,也就是说 ,如果一颗二叉树满足第i(1<=i<=K-1)层的结点数为2 * i-1 ,0<第K层的结点数<=2 ...

2019-04-26 19:30:25 186

原创 关于单调栈

单调栈是个什么概念呢?其实说白了它就是个栈这是废话咳,举个栗子:因为2比3小,所以直接砍掉;然后2比1大,所以2就待在1上面。也就是说栈里存着一个单调序列。那么单调栈有啥用呢?我们来看个例题:Description农民John的某 N 头奶牛 (1 <= N <= 80,000) 正在过乱头发节!由于每头牛都意识到自己凌乱不堪的发型,FJ...

2019-04-24 20:26:22 157

原创 【数论】Miller - Rabin算法

在我们需要判断一个数是否是素数的时候,最容易想到的就是那个熟悉的O(√n)的算法。那个算法非常的简单易懂,但如果我们仔细想想,当n这个数字很大的时候,这个算法其实是不够用的,时间复杂度会相对比较高。  怎么解决呢?我们先来了解一下“费马小定理”。假设我们有一个素数p,且另一个数a和p互素,就可以得到ap-1≡1(mod p)。这个定理很巧妙啊,有人就想了,能不能通过费马小定理...

2019-04-15 21:14:37 261

转载 tarjan-------一个神奇的算法

强连通分量给定一张有向图. 若对于图中任意两个节点 x, y, 既存在从x到y的路径, 也存在从y到x的路径, 则称该有向图是"强连通图".有向图的极大强连通子图被称为“强连通分量”, 简记为SCC(Strongly Connected Component).在上面的定义中, 我们称一个强连通子图G’ = (V’, E’)“极大”(其中V’ ⊆ V, E’ ⊆ E), 是指不存在包含G’的更...

2019-02-22 20:58:44 319

转载 迪杰斯特拉(Dijkstra) —— 最短路算法

Dijkstra是最短路基础算法之一(还有判负环的SPFA和多源最短路的Floyd),但在正常情况下Dijkstra是最快的,也同样是最难打的其实都不是很难,接下来我们来谈谈具体算法:1.适用范围没有负环(就是走一圈就可以将路程变小,没有最短路的图)的单源最短路(就是只有一个起点的最短路);2.基本思路:已知量只有每条边的权值,但我们可以很容易的想到起点到起点的最短路是0,于是我们...

2018-10-16 19:56:31 532

原创 基础数据结构(C++)

一、动态数组(vector)1.介绍有些时候想开一个数组,但是却不知道应该开多大长度合适,因为我们需要用到的数组可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度是可以根据我们的需要动态改变的。动态数组的实现也不难,在 C++ 里面有已经写好的标准模板库(Standard Template Library),就是我们常说的 STL 库,实现了集合、映...

2018-10-16 19:21:53 331

原创 【NOIP2018 - day1 - money】noip2018提高组——货币系统

题目传送门P5020题目描述在网友的国度中共有 n种不同面额的货币,第i种货币的面额为a[i],你可以假设每一种货币都有无穷多张。为了方便,我们把货币种数为 n、面额数组为a[1..n] 的货币系统记作(n,a)。在一个完善的货币系统中,每一个非负整数的金额x都应该可以被表示出,即对每一个非负整数x,都存在n个非负整数t[i] 满足 a[i]×t[i]的和为...

2020-03-01 15:49:47 1125

原创 【状压DP】Words

DescriptionIo和Ao在玩一个单词游戏。他们轮流说出一个仅包含元音字母的单词,并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致。游戏可以从任何一个单词开始。任何单词禁止说两遍,游戏中只能使用给定词典中含有的单词。游戏的复杂度定义为游戏中所使用的单词的长度总和。编写程序求出使用一本给定的词典来玩这个游戏所能达到的游戏最大可能复杂度。数据规模限制:单词总数...

2019-08-07 09:41:25 252

原创 【状压DP】Hie with the Pie

poj3311DescriptionThe Pizazz Pizzeria prides itself in delivering pizzas to its customers as fast as possible. Unfortunately, due to cutbacks, they can afford to hire only one driver to do the del...

2019-08-06 21:21:43 199

原创 【状压DP】售货员的难题

P1171题目描述某乡有n个村庄(1<n≤20),有一个售货员,他要到各个村庄去售货,各村庄之间的路程s(0<s<1000)是已知的,且A村到B村与B村到A村的路大多不同。为了提高效率,他从商店出发到每个村庄一次,然后返回商店所在的村,假设商店所在的村庄为1,他不知道选择什么样的路线才能使所走的路程最短。请你帮他选择一条最短的路。输入村庄数n和各村之间的路程(均是...

2019-08-06 21:07:37 518

原创 【搜索】【Meet in the middle】【Noi2001】方程的解数

Description已知一个n元高次方程:其中:x1, x2,...,xn是未知数,k1,k2,...,kn是系数,p1,p2,...pn是指数。且方程中的所有数均为整数。假设未知数1 <= xi <= M, i=1,,,n,求这个方程的整数解的个数。1 <= n <= 6;1 <= M <= 150。方程的整数解的个数小于231。★本题中,指数...

2019-07-01 16:44:03 230

原创 【搜索】【Meet in the middle】【Usaco2012 Open】Balanced Cow Subsets

题目描述Farmer John's owns N cows (2 <= N <= 20), where cow i produces M(i) units of milk each day (1 <= M(i) <= 100,000,000). FJ wants to streamline the process of milking his cows every da...

2019-07-01 16:24:45 273

原创 【搜索】【Meet in the middle】世界冰球锦标赛Ice Hockey World Championship

题目描述译自 CEOI2015 Day2 T1「Ice Hockey World Championship」今年的世界冰球锦标赛在捷克举行。Bobek 已经抵达布拉格,他不是任何团队的粉丝,也没有时间观念。他只是单纯的想去看几场比赛。如果他有足够的钱,他会去看所有的比赛。不幸的是,他的财产十分有限,他决定把所有财产都用来买门票。给出 Bobek 的预算和每场比赛的票价,试求:如果总...

2019-07-01 15:47:19 299

原创 【Hash】【Poi2012】A Horrible Poem

Description给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节。如果字符串B是字符串A的循环节,那么A可以由B重复若干次得到。Input第一行一个正整数n (n<=500,000),表示S的长度。第二行n个小写英文字母,表示字符串S。第三行一个正整数q (q<=2,000,000),表示询问个数。下面q行每行两个正整数a,...

2019-06-26 21:09:11 301

原创 【树状数组】【模板3】区间修改,区间查询

DescriptionYou have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of operation is to add some given number to each number in a given interval. The other is t...

2019-06-26 20:56:12 1748

原创 【树状数组】【模板2】区间修改,单点查询

Description给定数列a[1],a[2],…,a[n],你需要依次进行 q 个操作,操作有两类:1 l r x:给定 l,r,x对于所有 i∈[l,r],将 a[i]加上 x(换言之,将a[l],a[l+1],…,a[r]分别加上 x);2 i:给定 i,求 a[i]的值。Input第一行包含 2 个正整数 n,q表示数列长度和询问个数。保证 1≤n,q≤10^6第二行 n...

2019-06-26 20:36:05 577

原创 【树状数组】【Usaco2017 Jan】Promotion Counting

DescriptionThe cows have once again tried to form a startup company, failing to remember from past experience that cows make terrible managers!The cows, conveniently numbered 1…N1…N (1≤N≤100,000), o...

2019-06-24 20:12:38 195

原创 【树状数组】Hdu5542 The Battle of Chibi

Description给定一个长度为N的数列A,求A有多少个长度为M的严格递增子序列。1≤M≤N≤1000,序列A中的数的绝对值不超过〖10〗^9。因为答案可能很大,你只需要输出对 〖10〗^9+7 取模后的结果。InputThe first line of the input gives the number of test cases, T(1≤100). T test cas...

2019-06-24 19:47:39 168

原创 【树状数组】【归并排序】逆序对

逆序对的定义在一个序列中,若存在i < j,a[i] > a[j],那么a[i] 和 a[j]就是一对逆序对归并排序求逆序对归并排序简单来说就是每次把序列二分,然后合并两个有序序列在合并两个有序序列的过程中,可以用两个指针i,j分别对两个序列进行扫描,每次将a[i] a[j]中较小的那一个放到临时数组中若a[j] < a[i],因为两个序列都是有序序列,那么a...

2019-06-22 16:51:54 173

原创 【树状数组】Pku 2325 Stars

DescriptionAstronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are n...

2019-06-22 16:08:40 191

原创 【树状数组】【模板1】单点修改,区间查询

Description给定数列a[1],a[2],…,a[n],你需要依次进行 q个操作,操作有两类:1 i x:给定 i,x将 a[i]加上 x;2 l r:给定 l,r,求a[l]+a[l+1]+?+a[r] 的值)。Input第一行包含 2 个正整数 n,q,表示数列长度和询问个数。保证 1≤n,q≤10^6 。第二行 n 个整数a[1],a[2],…,a[n],表示初...

2019-06-22 16:03:48 261

原创 【倍增】机房的强者

Description作为机房的强者,hby有一个数列,数列里的数从1到正无穷。现在hby要将他的数列摆成优美的样子,他的操作如下:- 把这个数列按照奇偶分成两部分- 先放入一个奇数1,作为新的数列的第一个,再放入两个偶数2和4,表示数列第二项和第三项,后面每一块的长度都是2的幂次排列,数列前几项如下:1 2 4 3 5 7 9 6 8 10 12 14 16 18 20 11 13 1...

2019-06-22 15:58:31 148

原创 【最小生成树】【Usaco2005 Mar】Out of Hay干草危机

DescriptionThe cows have run out of hay, a horrible event that must be remedied immediately. Bessie intends to visit the other farms to survey their hay situation. There are N (2 <= N <= 2,000...

2019-06-18 21:13:16 475

原创 【DP】【NOI1995】石子合并

题目描述在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.输入数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数.输出输出共2行,第1行为最小得分,第2行为最大得分....

2019-06-18 20:47:54 186

原创 【生成树】分组行动

Description最近,木木中学要举行一年一度的辩论赛了,我们活泼开朗乐观向上不寂寞不生病不挂科天天回家吃饭的新时代好少年--飞飞,自然是热情参与咯!辩论嘛,就有正方和反方两个组,这是一个传统项目,所以,包括飞飞,木木中学的每一个学生都会加入2个组中的一个,不会有人打酱油的(如果有人打酱油,那么飞飞会义无反顾义不容辞的上前用一翻惊天动地的演说打消他打酱油的念头的)。自然啦,作为有思...

2019-06-18 20:34:59 171

原创 【DP】photo

Description有N个人,来自K个家族.他们排成一行准备照相,但是由于天生的排外性,每个人都希望和本家族的人站在一起,中间不要加入别的家族的人.问最少从队列中去掉多少个就可以达到这个目的.Input第一行给出N,K。N在[1,100],K在[1,5]第二行给出N个数,每个数为1到K中的某个数。Output最少从队列中去掉多少个就可以达到这个目的Sample Inpu...

2019-06-18 20:24:51 205

原创 【DP】Seq

Description由于hyf长得实在是太帅了,英俊潇洒,风流倜傥,人见人爱,花见花开,车见车载。有一群MM排队看hyf。每个MM都有自己独特的风格,由于hyf有着一颗包容的心,所以,什么风格的MM他都喜欢……但是,hyf有一个特别的要求,他不希望总是看到风格得差不多的MM,更加特别的是,如果两个MM风格完全一样,hyf不会有任何意见。现在,hyf希望从去看他的MM中,去掉一些MM,从...

2019-06-18 20:14:07 213

原创 【最小生成树】【度限制】Picnic Planning

DescriptionThe Contortion Brothers are a famous set of circus clowns, known worldwide for their incredible ability to cram an unlimited number of themselves into even the smallest vehicle. During th...

2019-06-16 19:59:19 324

原创 【DP】Sgu250 Constructive Plan(修改版)

声明此题解并不是Sgu250原题,输出与原题不同原题面Description艺术节就要开始了,但是 Jolin是一个很臭屁的人,她要求把舞台设置成 C字形的。艺术节的会场是一个 n*m的矩阵,有的地方安排了座位,被标记为 1;还有些地方是空地,被标记为 0。只有在空地才能搭建舞台。C字形的舞台是这样的舞台:1.它由从上到下排开的矩形组成2.三个矩形的左边界相同3.第一个...

2019-06-15 11:55:32 159

空空如也

空空如也

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

TA关注的人

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