随笔分类 - oi
排列组合
摘要:A(n,m)=m!/(m-n)!; C(n,m)=A(n,m)/A(n,n)=m!/[(m-n)!*n!]; C(m,n+1)=C(m,n)+C(m+1,n);//组合数的递推公式 证明:从n+1个数里取m个数有两种方式 取第一个数:转化为C(m-1,n); 不取第一个数:转化为C(m,n);
阅读全文
快读,快写
摘要:void write(int x){ if(x<0) putchar('-'),x=-x; if(x>9) write(x/10); putchar(x%10+'0'); return; } inline int read(){ int x=0,f=1; char ch=getchar(); whi
阅读全文
Blocks
摘要:题目描述 给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1。经过一定次数的操作后,问最大能够选出多长的一个连续子序列,使得这个子序列的每个数都不小于k。 总共给出M次询问,每次询
阅读全文
单调队列、单调栈
摘要:单调栈 什么是单调栈单调栈是指一个栈内部的元素具有严格单调性的一种数据结构,分为单调递增栈和单调递减栈。单调栈的性质1. 满足栈底到栈顶的元素具有严格单调性。2. 满足栈的先进后出特性,越靠近栈顶的元素越先出栈 元素进栈过程对于一个单调递减栈来说,若当前进栈的元素为a,如果 a<栈顶元素,则直接将a
阅读全文
线段树
摘要:线段树是一种基于分治思想的二叉树结构,用于在区间上进行信息统计。 线段树的每个节点都代表一个区间 线段树具有唯一的根节点,代表的区间是整个统计范围,如[1,n] 线段树的每个叶节点都代表一个长度为1的元区间 对于每个内部节点[l,r],它的左子节点是[l,mid],右子节点是[mid+1,r],其中
阅读全文
树状数组
摘要:树状数组 基本用途:维护序列的前缀和。 对于给定的序列a,我们建立一个数组c,其中从c[x]保存序列a的区间[x-lowbit(x)+1,x]中所有数的和。 数组c可以看作一个如下图所示的树形结构: 图中最下边一行是n个节点,代表数值a[1~n]。该结构满足以下性质: 每个内部节点c[x]保存以它为
阅读全文
动态规划
摘要:动态规划条件 无后效性 :即已经求解的子问题不受后续阶段的影响 最优子结构性质 :即下一阶段的最优解应该能够由前面各阶段子问题的最优解导出 子问题重叠性 :即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其
阅读全文
打鼹鼠
摘要:鼹鼠是一种很喜欢挖洞的动物,但每过一定的时间,它还是喜欢把头探出到地面上来透透气的。根据这个特点阿Q编写了一个打鼹鼠的游戏:在一个nn的网格中,在某些时刻鼹鼠会在某一个网格探出头来透透气。你可以控制一个机器人来打鼹鼠,如果i时刻鼹鼠在某个网格中出现,而机器人也处于同一网格的话,那么这个鼹鼠就会被机器
阅读全文
树形dp
摘要:树形dp 模型:给定一颗有n个节点的树,任选一个节点为根节点,从而定义出每个节点的深度和每棵子树的根。 树形DP的特殊性:没有环,dfs是不会重复,而且具有明显而又严格的层数关系。利用这一特性,我们可以很清晰地根据题目写出一个在树(型结构)上的搜索的程序。而深搜的特点,就是“不撞南墙不回头” 基本思
阅读全文
免费馅饼<简单版>
摘要:题目描述 SERKOI最新推出了一种叫做“免费馅饼”的游戏:游戏在一个舞台上进行。舞台的宽度为W格,天幕的高度为H格,游戏者占一格。开始时游戏者站在舞台的正中央,手里拿着一个托盘。下图为天幕的高度为4格时某一个时刻游戏者接馅饼的情景。 游戏开始后,从舞台天幕顶端的格子中不断出现馅饼并垂直下落。游戏者
阅读全文
坐标dp
摘要:坐标dp 坐标型dp一般都是给定网格、序列,来求满足某种性质的最大值、最小值。f[i][j]代表以i、j结尾的满足条件的某种情况。 典型例题:传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵
阅读全文
区间dp
摘要:区间dp 区间dp属于线性dp的一种,以“区间长度”作为dp的“阶段”,用两个坐标(区间的左、右端点)描述每个维度。区间dp中,一个状态往往由若干个比它更小且包含于它的区间所代表的阶段转移而来,所以区间dp的决策往往就是划分dp的方法。(例:f[i][j]=f[i][k]+f[k+1][j]) 区间
阅读全文
线性dp
摘要:线性dp 具有线性阶段划分的动态规划算法被统称为线性dp 经典例题有: 1.最长上升子序列(lis) 2.最长公共子序列(lcs) 3.数字三角形 这里给出最长上升序列的代码 for(int i=1;i<=n;i++){ f[i]=1; for(int j=1;j<i;j++){ if(d[i]>d
阅读全文
背包dp
摘要:背包dp 背包dp的模型可以看作是“给定n个物品,从中选择一定的物品”。 我们从以下几个角度考虑: 1.已经选择的物品 2.背包容量 dp数组常常保存最大价值 0/1背包(一个物品只选一次) #include <bits/stdc++.h> using namespace std; const in
阅读全文
浙公网安备 33010602011771号