自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

番茄你个西红柿吖的博客

超级蒟蒻mht。。。

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

原创 我知道不会有人看我的博客,但我还是想说......

蒟蒻mht于2018年7月6日晚8点正式退役。 感谢刘老师和同学们对我的帮助,祝同学们在noip2018取得好成绩。

2018-09-03 23:06:46 155 1

原创 那些年犯过的楞头喆级别的错误!

重开!!! 我会把这篇博客置顶的!!!截至2018.3.19日的一周内犯的错误: 1.在有乘法和加法的算式里没加括号! 2.md输入输反了… 3.日常操作没付初值。...

2018-03-19 21:21:40 142 1

原创 tarjan求割点,割边

割边:在联通图中,去掉某一条边,使该图某些点不能相互到达,此边即为割边。 割点:同理,在连通图中,去掉某个点及与这个点相连的边,使该图有点不连通,此点即为割点。 搜索树:从某一点开始dfs遍历所有点且不重复的情况下经过的边构成的树。 tarjan算法中关键的两个数组: dfn x 时间戳数组,即为dfs遍历是首次到达x点的序号,就是按照遍历顺序给所有点编号。 low x 在...

2018-06-06 11:54:24 246

原创 Tarjian求lca(模版)

记个板子! tarjian求lca利用了并查集和dfs序。 lca就好比搜索中两个点的最尽转折点。 并查集的father数组记录此树的根节点,在dfs搜索的过程中更新father数组。 因为搜索的顺序,father数组并不能在开始就传回最高层。因此对于两个点,如果一个点被搜索过了,而另一点此时被搜到,那么这两点的lca就是被搜索过的点所在树的根节点。(这个可以用反证法证明)。 更详细的讲...

2018-05-28 21:44:36 447

原创 状压DP例题(种花小游戏+广场铺砖)

状态压缩其实就是用特殊的方法来表示复杂的状态做DP,这种特殊的方法一般是位运算。 例题一:种花小游戏 DPi j ,i可以拆分成二进制数,每一位上的0或1表示是否走过,j表示当前位置。#include<bits/stdc++.h>using namespace std;const double maxn=200000000.0;double f[600010][30]...

2018-05-14 21:15:57 623 2

原创 数论例题讲解

本周刚开始学习数论,直接被虐爆。。 下面是几道基础题目的题解。1。分数分解 这里需要一个转换: 1/x+1/y=1/n到xy=nx+ny到n*n=(x-n)(y-n); 转化到这一步,我们就知道了满足条件的方法数等于n*n的因子数(包括1和n*n)除以二. 代码:#include<bits/stdc++.h>using namespace std;int n...

2018-04-17 20:54:47 346

原创 数据皆狗之线段树(模板)

线段树是一种超强的数据皆狗,支持区间查询,区间修改,单点修改,区间求和和其他变形问题。 线段树强大在于它平摊了查询和修改的时间复杂度。 线段树概念没啥好讲的,我们直接看模板题。 然后代码:#include<bits/stdc++.h>using namespace std;const int maxn=100001;int a[maxn];struct stree...

2018-04-12 20:20:18 146 1

原创 4月12号真诚的dp练习赛

啊啊! 犬国VAN岁! T1 这题是一个基础DP。 我们设计Fij,i表示前i首歌,j表示音量,如果Fij等于1,说明存在这个状态。 那么代码就很简单了呀:#include<bits/stdc++.h>using namespace std;int n,bl,ml;int a[55];int f[55][1111];bool flag=0;int ...

2018-04-12 19:35:55 181 4

原创 虚伪的DP练习赛!

T1 这题和数字三角形差不多。 你可以建立一张图,行代表时间,从1开始;列代表位置,从1到10. 首先你用一个a数组存那些时间点会有馅饼落下来。 然后用f数组做DP,Fi j 的最优值是由他上方,左上方,右上方,三个位置的最优值取max,再加上他本身位置上会落下的馅饼数量。 ——————————————————————————分割线 T2 这题和爬楼梯相似。 我们直接用D...

2018-04-08 13:26:05 129 3

原创 数据皆狗之树状数组

树状数组贼强。 树状数组支持单点修改和区间求和。 树状数组的精髓在于lowbit数组,lowbit[i]是将i化为二进制后从右往左第一位数字为1的位置代表的值。 比如: 8化成二进制是100,从右往左数第三位是第一个1,代表的值是8. 如何求lowbit呢? 这里有一个很神奇的操作:int lowbit(int t)//求lowbit{ return t&(-t...

2018-03-30 21:19:59 94

原创 动态规划不经典问题之LCS与LIS的终极合体——LCIS!

每天都要水博客!。 其实我应该写区间DP和树形DP的,但是还剩30分钟下课,我怕写不出什么好文章,那就随便说点吧。 LCS(最长公共自序列)和LIS(最长上升自序列)都是我们很熟悉的问题,那么我们该怎么求一个最长公共上升自序列呢? 其实我们思考一下这两者的算法,也大约有了点思路。 对于第序列一的第i个和序列二的第j个,如果他们相等,那就往前搜,因为不下降,所以前面能够继承的值一定要满足比第...

2018-03-20 21:29:41 180

原创 关于LC(01)背包的一些小问题。

日常水博客! 01背包在取得最优值时不一定将背包装满,所以们思考如何在装满背包的情况下取得最优值。 看似是一个不一样的问题,其实解决方法很简单,只要更改初值就可以了。 01背包(不要求装满):for(int i=1;i<=v;i++)f[i]=0;要求装满: memset(f,-127,sizeof(f)); f[0]=0;OK了。 这样保证在状态转移时...

2018-03-19 21:06:04 307

原创 背包问题之分组背包!

我又来水博客了。 分组背包是LC(01)背包的一种变形。分组背包中物品被分成几组,每组中只能挑选出一件物品加入背包,这是与01背包的区别。 在01背包中,我们以每一件物品作为动态规划的每一阶段,但是在分组背包中我们要以每一组作为每一阶段。 其实很简单,代码如下。for(int i=1;i<=k;i++)for(int c=v;c>=0;c--)for( each 物...

2018-03-18 21:20:46 3821 2

原创 水博客之LC背包

讲一下背包问题里最简单的LC背包。 有n种物品,每种物品只有一件,每种物品都有他的价值和体积,你有一个体积为v的背包,要在装得下的前提下装价值最多的东西,请你求出这个最大的价值。 f[i][v]表示前i个物品放进体积为v的背包里的最优值。 对于第i件物品要么被放进背包,要么放。 如果不放,前i件物品放进v的背包的最优值就等于前i-1件物品放进v的背包里的最优值。 如果放,前i件物品放进v...

2018-03-10 21:35:11 208

原创 DP一周做题报告3(未完成并且懒得完成)

哇咔咔! 例题一——护卫队 这道题有时间啊,速度啊,挺烦的。所以我们输入的时候就把每辆车的过桥时间算出来比较方便哦。 这题看上去要开二维,其实一维就足够了。 对于第i辆车,我们枚举小于i的所有车j,这里枚举到j的意义是i到j的车是一组的,所以这里肯定是倒着搜索的(j从i到0),同时要把搜到的车的质量都累加起来判断有没有超上限。 我们在找出i到j的时间最大值作为他们过桥的时间,前j-1...

2018-03-10 21:16:21 127

原创 DP一周做题报告2

前一篇里的题目过于水,我在讲点别的题目(其实也很*) 我发现我上片博客讲的太鸡儿罗嗦了,这片我简单点,都是文化人嘛。 例题一——FJ收苹果 额,这道题目也很好做。 首先按照时间排序。对于第i个苹果,枚举时间在他前面的所有苹果,计算一下距离,如果可以从那个苹果走过来接这个苹果,那fi就可以继承fj的最优值。ojbk! 例题二——饥饿的奶牛 这道题目好像和轮船问题差不多,只是算...

2018-03-10 20:53:03 158

原创 DP一周做题报告1

好久没有更新博客啦,今天终于有时间来机房**啦! 上周我刷了不少DP题目,深有感触,所以今天特地来写一些总结。 直接题目! 例题一——导弹拦截 这道题目很经典,题目有两个问题,第二问是贪心问题,所以我们在这里只讨论第一问。 因为后面的导弹的高度一定小于等于前面的导弹的高度,所以最终拦截的导弹的高度是构成了一个不下上升序列,因为长度要最长,所以求的是一个最长不上升子序列。 我们可以设...

2018-03-10 20:36:19 142

原创 LCS问题的深入探讨

在上一篇博客中我简单的说明了LCS的算法原理和DP方程,但这是远远不够的,我们还要考虑如何实现。 观察这个DP方程,我们感觉它的结构类似于树,就像这样: 我们可以用搜索的方法来求解,但是会有许多重复。 就像上图中(6 4)被搜了两遍,也许后面还会搜到。 大量的重复会导致效率的降低,所以我们要设计一种解决方法。 这种解决方法叫做备忘法,其实很简单,就好像你做了一个备忘录,每次搜索时都查...

2018-02-25 14:17:45 168

原创 动态规划经典问题之LCS

LCS是最大公共子序列的缩写。假设有两个序列x和y,有一个序列z即是x的子序列,又是y的子序列,就称z为xy的公共子序列。最长公共子序列就是长度最长的公共子序列。(如果还不明白可以百度)。 如何求最大公共子序列呢? 我们首先想到的可能是枚举法,这也是最暴力最直接的方法,当然时间复杂度也是非常高的。 所以我们要用到高效的动态规划算法。 一般来说动态规划研究的是前i个元素的最优值,但这里有两条...

2018-02-24 16:37:07 290

原创 2018寒假福州集训大总结

别在意Day6,7,8去哪里了(我懒得写) 长达一周的集训终于结束了。 这次集训确实学到了不少东西,但最重要的是开拓了眼界,见识了大佬们的厉害,明白了自己的弱小。 就知识方面的话,感觉自己还有很多没学过的,许多学过的知识也没有彻底掌握,比如图论、搜索这些很重要的知识,另外感觉我的暴力水平还不够。 我觉得多做题多思考才是通往成功的路。 加油吧。...

2018-02-14 19:02:46 138

原创 2018寒假福州集训记Day5

哇咔咔,我是不会鸽博客的。 先讲一下今天的考试,结果就不谈了。 总体来说考试难度我觉得还行(刚好虐我又不很虐)。 T1 这道理要联系到图论,每一个点可以换到其他位置,换到其他位置后又可以再换,这些点构成了连通分量,在同一个连通分量里的点可以互相到达。 这道题目目的就是让大的数尽量靠后,小的数尽量靠前。在一个联通块之内的点,可以互相到达,但不能到其他地方,为了保证字典序,我们在每个联通块内...

2018-02-09 23:49:12 148

原创 2018年福州寒假集训Day4

蒟蒻又来写博客了。 悲伤的一天,从爆零开始。 T1 这题题目言简意赅,但是做起来稍微有一点棘手。 我一共尝试了三种方法:第一种是搜索,爆搜是最容易想到的,但是打完之后调了半天调不出来,想想爆搜容易超时,所以放弃搜索。 第二种方法是位运算,因为货币的面值都是二的倍数。将n化为二进制,1可以向低位移动,所以方案数就会有多种。不过我智障的认为这是有什么规律的,搞了半天没搞出来。 正解其实就是...

2018-02-08 21:09:18 174

原创 2018年寒假福州集训Day3

哦,糟糕的一天。 上午考试人生首次爆零,下午数论一脸懵逼。难受。 T1是一个·模拟,只要选定这个图形中的任意一个点,再判定他在第二张图形中的位置,就可以预测出图形移动轨迹。 T2这题想了好久,还打表找规律,然而失败。其实可以想象最后的纸片一定是从上到下叠在一起的,根据题目给出的那串数字顺序可知道,相邻的数字之间纸片一定相连的,所以我们可以在从上到下的图中将这两个数字纸片相连。我们一直这

2018-02-07 21:17:43 127

原创 2018年福州寒假集训记Day2

哦 今天上午依然是考试。 嗯,题目难度稍微有点大,不过靠暴力还是能拿到一些分的。 不知道为什么我的程序提交上去然后没有评测(庆幸) 我觉得叫上去可能最多50分吧·。 T1 这道题正解是二分答案(我真的没想到)。 二分最大重量的最小值,然后验证。 怎么验证呢,如果我们要验证一个值,那么比这个值小的杠铃无论怎么移动都是没有影响的,我们可以将它们先搬走,再看看剩下的比这个值大的杠铃是非在

2018-02-06 21:17:42 203

原创 2018寒假福州集训记Day1

哦 今天上午直接一波考试。 之前1个月都在准备期末考试,信息书都没翻过,考试前临时抱佛脚,然而并没啥卵用。。。 好了不谈了,说说题目吧。 T1是一道DP题目(我考完试才知道,考试的时候我也有想过可能与递推有关), 题目给的样例刚好是两种极端的情况,一种是每行语句下面都加一个printf再编译一遍,另一种是一直二分。 然而正解是DP 我直接把这两种情况算出来在比较一下,输出最小值。

2018-02-05 21:44:42 167

原创

堆简直就是c++党的福利,不仅功能强大,而且调用十分简单。 堆就像一个容器一样,你把元素放进去,堆会将堆内的元素按照大小顺序排。 堆有两种,小根堆和大根堆,顾名思义,小根堆就是堆头永远是堆内最小的元素的堆,而大根堆的堆头却是最大的元素。 堆的用法 首先需要在头文件内调用堆: priority_queue q; 这是大根堆。 priority——queue<

2017-12-30 06:49:53 115

原创 图论之Kruskal

昨天图论考试里有一道最小生成树的题目,我用prim骗了40分。(我不太记得Kruskal是怎么写的了)所以今天来写一篇关于Kruskal的博客。 Kruskal要用到并查集的知识,如果不会并查集可以去这里看: http://blog.csdn.net/m20020910/article/details/78925363 或者http://blog.csdn.net/qq_39670434

2017-12-29 13:01:02 138

原创 并查集!

并查集,顾名思义,有合并和查询的功能,是一种非常高效的算法。 并查集其实贼简单,主要就三个操作 1.查找根节点(找爸爸)。void getfather(int v){ if(father[v]=v)//如果该节点的爸爸是自己,那他就是根节点。 return v; else { father[v]=getfather(father[v]); //

2017-12-28 19:06:02 122 1

原创 图论之拓扑排序

拓扑排序是根据先后顺序排序,而不是根据大小来排序。 在有向无环图中,点与点之间有单向边相连,这表明一种约束关系。 例如A到B有一条边,那么A到B就有约束关系。 拓扑排序就是基于多个点之间的约束关系,生成一条线性序列。 首先要明白两个概念: 入度:进入某一点的边数。 出度:从某一点出发的边数。 A到B,B的入度加一,A的出度加一。 先来看一道例题: 有N个士兵(

2017-12-28 09:12:38 384

原创 图论入门测试之后。

昨天,那个大雪纷飞的日子,我们进行了图论入门测试(md把入门去掉),然后就被虐了。 说一下题目吧。 考试的时候看到T1很快就想到这是个遍历,但是我邻接表用的熟,所以只能用邻接矩阵。其实我想过是否要遍历两次,但是我不知道我是怎么想的又把这个想法否定了。。(我好像以为遍历一次就OK了)。然后就不谈了。 T2的话其实也很容易发现这是个prim,最大生成树。 然后自信

2017-12-11 22:15:34 166

原创 图论之bellman-ford

如果边有负权的话,dijkstra就是错误的了。 针对这种情况,还有一种高级的算法叫做bellman-ford; bellman-ford也是用来求单源点到其他原点的最短距离。 bellman-ford可以用边表或者邻接表来搞。 算法过程: 1.首先初始化每个店到起点的距离为正无穷。 2.取所有边,用左端点迭代右端点。 3.若不能松弛,结束。 4,最多松弛n-1次,若第n次还可以松弛

2017-12-10 11:13:53 173

原创 图论之dijkstra

di’jkstra是由迪杰斯特拉提出的一种图论算法,用于求一个点到其他所有点的最短距离。 dijkstra的核心思想就是将所有的点分成两个集合A,B,从B集合中找到一个离A集合内的点最近的点,把他加入A集合,然后再用这个点去迭代其他所有点。 注意dijkstra不能用于有负权的图(要不然永远找不到最短路径,每次加一边就会变小) 核心代码;void dijkstra(int st)

2017-12-10 08:40:21 256

原创 图论之floyed

为了巩(ying)固(fu)提(zuo)高(ye),我决定写几篇图论的博客。本人蒟蒻,如有不对,请狂喷我!##弗洛伊德##floyed属于基本的图论算法之一。floyed用于求任意两点之间的最短距离,其原理比较简单,主要是迭代,相信大家都明白,那我就不说了。核心代码非常短,只有五行:for(int k=1;kfor(int i=1;ifor(int j=1;ji

2017-12-09 20:43:52 182

原创 蒟蒻回归啦啦啦

期中考试爆零,真的爽死啦。 不过令人兴奋的是终于回到机房了(虽然都是爆零) 嗯,接下来就是一段新的旅程了。 感觉自己太弱,什么都不会。 所以要好好学习,争取学会除GCD以外的函数。 希望明年一定要冲过初赛。 加油加油吧!!!!

2017-11-29 21:04:55 117

原创 排序之快速排序

学过c++的同学都知道,c++里面有个很强大的sort(快排)函数,可以一键排序。 那下面我们来详细阐述一下快排函数的原理。 快速排序和归并排序很像,都是利用分治思想和递归思想。 快速排序的原理就是现在数列中找到一个准基,一般来说是中点(有时候是随机数)。从起点搜索到中点,找到一个比中点数大的数,从中点到终点找到一个比中点数小的数交换这两个数。一直交换,这样最后我们可以保证中点左边的任意

2017-10-19 13:22:55 168

原创 排序之归并排序

咳咳,排序算法到了归并排序就比较高级了,思想也就没有那么暴力了; 归并排序其实是利用了分治思想和递归思想。 主要思想 把等待排序的数列从中间那个数(其实不一定要中间)切断(二分嘛),变成两个数列,把这两个数列再分别从中间切断,一直切切切,直到每个数列只剩一个数,然后开始合并,把两个无序数列合并成一个有序数列,然后再把这个新数列去和别的数列合并,合并合并合并最终合并成为一个数列,这个数列就

2017-10-18 22:44:39 156

原创 排序之冒泡排序

好,下面是简单排序的最后一种:冒泡排序; 主要思想 假如有一串无序数列,我们要将它排序。 我们先设想一下它的有序情况,每个元素与其他元素之间是不是都有一些必然关系。 就像5和10在从小到大序列中,5是不是必然在10的左边,虽然我们不知道他们是否挨着或是中间隔了几个数,但我们肯定他们的相对位置必然是5在10左边,10在5右边。 那么冒泡排序就是根据这个原理。每个元素和他身边的元素比较,如果A

2017-10-17 13:05:09 180

原创 排序之选择排序

书接上文,下面是选择排序。 选择排序是最容易想到也是最容易实现的排序方式。 *主要思想 n个元素的数组,每次从原数组中找到最小的一个元素,将这个元素加入新数组,再把这个元素从元数组中删除,就完成了一次选择。 经过n-1次选择后原数组中剩下一个元素,就是最大的一个元素,将他加入新数组里,就完成了选择排序。 这个代码就贴了,大家都懂,两层循环嘛。 选择排序是比较基

2017-10-17 08:05:40 159

原创 排序之插入排序

本人是纯正的蒟蒻。 写这些博客目的是为了复习一些基础知识,同时也帮助一下比我还要弱的蒟蒻(估计没有)。 排序 排序有很多种,这里先介绍几种最基本,最简单的。 一.插入排序( 主要思想:假设前面n个元素已经有序排列,现在要插入一个元素,使这n+1个元素有序,先在原有序列中找到应该插入的位置,然后把这个位置的数及其后面的数都往后移动一位,这样就空出了一个位置,这个位置就是我们要插入的位置。

2017-10-16 13:21:41 162

原创 垃圾蒟蒻的反思

昨天 noip2017初赛 地点在浣江初中 外面一直下雨,中午没怎么睡觉,做大巴的时候睡着了,下车迷迷糊糊的,以至于考砸了都没感觉。。。。 说试卷吧,一开始感觉试卷好难,后来反复琢磨发现其实这是卷还是可以做的,起码得有八十分吧,然而。。。。 前面选择题还可以,就是后面程序填空题和完善程序题失分太多,我觉得还是我刷题太少,对递归,模拟这种题目没啥感觉。比如那个程序填空第二题,我tm模拟了两面都

2017-10-15 21:00:36 194 1

空空如也

空空如也

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

TA关注的人

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