
各种杂鱼算法
文章平均质量分 52
Z_X_B_233
这个作者很懒,什么都没留下…
展开
-
LIS的nlog(n)算法
#include #include #include #define maxn 1000using namespace std;int ans[maxn],a[maxn],len;int Search(int data){//我们要找到的是最小的那个>=mid的ans的位置 int l=0,r=len,mid; while(l原创 2017-07-16 16:28:10 · 587 阅读 · 0 评论 -
RMQ算法详解
rmq这个东西其实是可以用线段树来实现的但是毕竟rmq代码简单嘛算法思路就是dp所以我们要开一个dp的全局变量dp[i][j]就是以i开头长度为2^j的一段中最大的值那么很容易的我们就可以推出状态转移方程dp[i][j]=max(dp[i][j-1],dp[i+(1把dp数组求出来后我们就可以进行查询了,查询的方法就见代码了啊初始化代码:void rmq_init(原创 2017-04-20 18:03:42 · 318 阅读 · 0 评论 -
HDU 6199(DP)补题+一个超级有用的滚动数组思想
恩,这个题目开始想着应该不能用dp来写,因为后面的状态对前面的状态有影响然后emmmm,只有后面的状态对前面的状态有影响,这个。。。有点背锅了现在说正解dp[p][i][k]就是人p,在第i个宝石(这个宝石未取到)至少要取k个的差值那么我们的状态转移方程就出来了假设p=1代表Alice p=0代表Bobdp[1][i][k]=max(dp[0][i+原创 2017-09-12 17:12:30 · 354 阅读 · 0 评论 -
玲珑杯Round20PE
#include #include #include #include #include #include #define maxn 400100using namespace std;struct Data{ int val,id;};struct Tree{ int l,r,sum;};Data a[maxn];Tree t[maxn*10原创 2017-08-29 15:00:25 · 240 阅读 · 0 评论 -
卡特兰数及其应用
4对括号有多少种可能的合法匹配方式?n对括号呢?此题是卡特兰数的一个通常应用,相似的还有出栈顺序等。关于卡特兰数的具体内容,请参阅百度百科或Wiki.http://baike.baidu.com/view/2499752.htm 网络上可以搜到很多相关的题目和解答,但是鲜有易懂的推导过程。这里记录一种推导过程如下: 结论:对于n对括号,合法的排列共有C(n,2n) -转载 2017-08-21 19:37:45 · 426 阅读 · 0 评论 -
对DFS序的理解
其实dfs序这个东西就是可以把找一个节点的所有子节点的问题转换为一段区间中的问题的一种方法而区间中的问题,啧啧,线段树,主席树什么的搞一搞就好了哇我们dfs的时候,开一个全局变量cnt,然后每做一次dfs,cnt++那么这个节点的dfs序就是第一次经过这个节点的cnt对于每个节点,他都有两个东西,一个是第一次访问的cnt,因为dfs会回溯嘛,那另一个就是回溯时的cnt那么dfs原创 2017-09-03 19:00:08 · 291 阅读 · 0 评论 -
2017多校(第一场)P2(高精度思想)
开始做这个题的时候想着用高精度保存每个字母对和的贡献,开个26位高精度就好了然后当时就特别困,高精度也是很久以前写的了,就很丢脸的没怼出来现在补一下题思路其实还是高精度,但是没有必要拿那种真正的高精度去怼他直接看代码就能理解了其实这题还是有点练编程能力的#include #include #include #include #include #define Mod 1原创 2017-07-26 16:19:54 · 267 阅读 · 0 评论 -
第三场多校 03 HDU6058
这个题目主要的思路是对的就是计算每个数字出现的次数然后我发现我们可以对每个数字,往左找k个比他大的,往右找k个比他大的然后他们的位置之差乘起来就是出现的次数等下会补个图详细解释下然而如果我们找k个比他大的话,线性找的话,时间复杂度会爆炸所以我们就想从最小的开始找,然后找一个就把他从数组中删去那么对于下一个数,他的左右k个就是k个比他大的数了所以我们要保存每个原创 2017-08-02 14:36:38 · 279 阅读 · 0 评论 -
Mark一下读入一行的代码
getchar(); c=getchar(); while(c!='\n') { if(c==' ') {Max=max(Max,p);p=0;} else if(c>='A'&&c c=getcha原创 2017-08-09 13:06:14 · 270 阅读 · 0 评论 -
HDU6092(动态规划思想)
其实咱们都做过给你k个数然后求这k个数有多少个子集的和等于k的题那么现在就是反过来了那么做法也是很神奇的对于序列a,我的1的个数就是a[1]的个数那么如果我去掉所有的1,并且维护a序列的性质不变,那么2的个数就是a[2]那么问题来了,如何去掉所有的数k后维护a的性质不变呢解决方法就是我们一个一个的去掉k现在我去掉一个k后由于我知道1-k-1的数全部都被去掉了那么原创 2017-08-08 19:59:03 · 493 阅读 · 0 评论 -
zoj3537 凸包,最优三角形,区间dp
昨天本来只是想刷个区间dp而以,然后碰到了这题然后就用一下午学了凸包的判定和最优三角形然后今天花了三个小时把这题AC了,也强化了自己对凸包,最优三角形和区间dp的理解题意就是给你一个点集,如果这个点集中的点不能全部构成一个凸包的话,就直接输出一句话否则就输出能把这个凸包切成三角形的最小花费,算花费的公式已经给出来了#include #include #include #i原创 2017-07-31 16:08:44 · 293 阅读 · 0 评论 -
凸包的判定(模板)
第一次学习凸包的判定哈,开始一直想不通为什么要从小到大判一遍后又要从大到小再判一遍然后自己画了个图,终于知道了先上模板struct Point { double x; double y; Point(double a = 0, double b = 0) : x(a), y(b) {} friend bool operator < (const Po原创 2017-07-30 15:03:11 · 722 阅读 · 0 评论 -
凸多边形,分割为三角形的最优解法
如果对于切割每一个三角形,对于他的顶点(a,b,c)我们有一个函数f(a,b,c)来计算我们切割这个三角形所需的花费求把这个多边形转化为三角形的最少花费我们接下来看,如果对于我可以先把所有的点逆时针存到一个数组中,然后我们预处理出求所有三角形的花费然后假设有n个点,总区间就是0,n-1对于每个区间l,r假设我们有一个三角形(a,a+1,k)在最优解中,那么最优解就等于f(a,a+1原创 2017-07-30 16:19:35 · 4527 阅读 · 0 评论 -
动态建线段树,hdu6183,参考杰少的博客
我的代码不知为什么t掉了,这个等杰少回来再去问问他先把我t掉的代码放在这里,主要是学一下动态建树的思想这个是非常省空间的这题目主要思路就是对每个颜色建一颗线段树,保存其y1,y2,范围内的点到y轴的最小距离#include #include #include #include #define inf 0x3f3f3f3fusing namespace std;st转载 2017-09-02 18:09:05 · 523 阅读 · 0 评论