自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线段树

线段树针对:动态区间问题。对于数组A,有如下操作: Update(x, v):把A[x]修改为v。 Add(L, R, v):把A[L], A[L + 1], …,A[R]的值全部加v。 Set(L, R, v):把A[L], A[L + 1], …, A[R]的值全部修改为v(v >= 0)。 Quer(L, R):计算A[L], A[L + 1], …, A[R]的元素和与最值。

2017-11-02 01:09:05 251

原创 lca的三种算法【倍增 / RMQ / Tajan】

lca:树上两点的最近公共祖先倍增算法(在线)利用dfs记录结点深度deep[i],并求出单点祖先:f[i][j]:从结点i向上出发2j2^j 步的祖先,可推出→ f[i][0] = fa[i], f[i][j] = f[f[i][j - 1]][j - 1] 求两点x,y的lca,不妨令deep[x] >= deep[y],x先爬deep[x]-deep[y]步使得x和y的deep相同;

2017-11-01 23:45:27 685

原创 快速幂

快速幂问题:求a ^ b %MO。b可以用二进制数表示,即b = 2 ^ p1 + 2 ^ p2 + … + 2 ^ pna ^ b = a ^ (2 ^ p1) * a ^ (2 ^ p2) * … * a ^ (2 ^ pn)代码:for(ans = 1; b; b >>= 1, (a *= a) %= MO)if (b & 1) (ans *= a) %= MO;时间复杂度:O(l

2017-11-01 21:14:07 271

原创 RMQ问题(ST表解法)

RMQ问题(ST表解法)针对:范围最值问题。对于数组A[1…n],有操作如下: RMQ(L, R):A中第L个数到第R个数中的最小值(最大值类比)。d[i][j]:从i开始,长度为2j2^j的一段元素的最小值。可推→ d[i][j] = min(d[i][j - 1], d[i + (1 << (j - 1))][j - 1]) ;查询时,令k为满足2k2^k <= R - L + 1的最

2017-11-01 20:30:48 381

原创 【逆序对】【cofun1917】奇数码问题

【cofun1917】奇数码问题Description 你一定玩过八数码游戏,它实际上是在一个33的网格中进行的,1个空格和1~8这8个数字恰好不重不漏地分布在这33的网格中。 例如: 5 2 8 1 3 _ 4 6 7 在游戏过程中,可以把空格与其上、下、左、右四个方向之一的数字交换(如果存在)。 例如在上例中,空格可与左、上、下面的数字交换,分别变成: 5 2 8 5 2 _ 5

2017-11-01 20:03:08 691

原创 逆序对的两种算法【树状数组 / 归并排序】

对于数组A[1…n],求逆序对对数。可根据数据范围离散化。以下算法时间复杂度:O(n * log n)。逆序对对数最大为n*(n-1)/2,结果经常要用long long保存。树状数组算法逐一读入a[i]。利用树状数组统计比a[i]小的数个数s,逆序对个数加上i - 1 - s。把a[i]计入树状数组,即结点i加1。代码:#include<bits/stdc++.h> using

2017-11-01 20:01:51 406

原创 树状数组(二叉索引树)

树状数组(二叉索引树BIT)针对动态连续和查询问题。 对于数组{A1,A2,A3,…An},有操作如下: Add(x, d):让Ax增加d;Query(L, R):计算A中第L个数到第R个数的和(S[R] - S[L - 1])。lowbit(x):x的二进制表达式中最右边1所对应的值。 -x:x按位取反,末尾加1。(补码表示) → lowbit(x) = x & -x ; 黑

2017-11-01 19:00:23 323

原创 哈夫曼树与哈夫曼编码

哈夫曼树(最优二叉树)

2017-11-01 17:33:32 319

原创 【贪心+优先队列 / 并查集】【cofun1025】工作安排

【cofun1025】工作安排Description 为了让农场有效运转,约翰必须靠自己工作来赚钱。他接到了N项任务,完成每项任务 都要花费一个单位的时间。第i项任务的截止时间为Di,如果能按时完成,可以得到报酬Pi。 约翰从0时刻开始工作,由于他在同一个时间内只能从事一项任务,所以他很难按时完成所 有任务。请帮助约翰计算一下,他最多可以赚多少钱?Input Format 第一行:单个整数:N,

2017-10-20 19:59:41 837

原创 【DP】【cofun1041】修建草坪

【cofun1041】修建草坪Description 在去年赢得了小镇的最佳草坪比赛后,约翰变得懒惰了,再也没有修剪过草坪了。现在,新一轮的比赛又开始了,约翰希望能够再次夺冠。然而,约翰的草坪非常脏乱,因此,约翰需要让他的奶牛来完成这项工作。约翰有N头奶牛,平时排成一条直线,编号为1到N。每只奶牛的能力是不同的,第i头奶牛的能力为Ei。靠在一起的奶牛很熟悉,所以如果安排编号连续的K + 1头

2017-10-20 19:01:26 339

原创 【状压DP】【cofun1155】奶牛乘电梯

【cofun1155】奶牛乘电梯Description 有 N 头奶牛需要乘电梯上楼,第 i 头奶牛重 Wi,电梯的载重上限是 C,请问电梯最少往返几次 才能运完所有的奶牛?Input Format • 第一行:两个整数 N 和 C,1 ≤ N ≤ 18; 1 ≤ C ≤ 10^8 • 第二行到第 N + 1 行:第 i + 1 行有一个整数 Wi,1 ≤ Wi ≤ C Output Form

2017-10-20 17:14:47 444

原创 【状压DP】【cofun1040】混乱奶牛

【cofun1040】混乱奶牛Description 约翰家有N头奶牛,第i头奶牛的编号是Si,每头奶牛的编号都是唯一的。这些奶牛最近在闹脾气,为表达不满的情绪,她们在挤奶的时候一定要排成混乱的队伍。在一只混乱的队伍中,相邻奶牛的编号之差均超过K。 比如当K = 2时,1, 3, 5, 2, 6, 4就是一支混乱的队伍,而1, 3, 6, 5, 2, 4不是,因为6和5只差1。请数一数,有多少种

2017-10-20 17:02:03 608

原创 【总结】状压DP

对于状压DP的理解和总结一般来说,状压是把多种状态(方案,集合等等)hash进二进制数中,0表示该状态不存在,1表示该状态存在(也有用三进制等等,如算路径一点可经过2次),所以首先应掌握位运算。到目前为止做到的状压大致是棋盘模型和覆盖模型,但是DP中状态种类<=20的应该都可以考虑状压。DP中的状态有的可以直接表示,有的要用dfs,bfs等等先处理出来,状压DP除了要压状态外其实和普通DP一样

2017-10-19 16:47:15 993

原创 图的概念与存储

参考资料: 本文不做商用,只是为了更好的复习,如果有侵权请指出,十分抱歉。定义&术语 表示邻接矩阵:适合顶点数规模小、边稠密的简单图 无权图:不存在边(u,v) → a[u][v] = 0; 存在边(u,v) → a[u][v] = 1。 有权图:不存在边(u,v) → a[u][v] = ∞或-∞;存在边(u,v) → a[u][v] = 权值。 无向图中邻接矩阵按矩阵副对角线对称。

2017-10-18 11:36:07 307

原创 【状压DP】【cofun1375】麦田

Description 话说公元199年,曹操准备与袁绍进行官渡决战。为整肃军纪,曹操下令:“全军将士,上至统帅,下至马佚,行军训练,不准践踏庄稼,不准倒犯民利,违令者斩首。”遇有麦场,骑兵下马,扶麦而行。百姓见状,交口称赞。不巧,在一次出巡时,曹操乘坐的战马受惊,跃入麦田,践踏了一片麦苗。曹操当即下马,请求主簿依军令将自己斩首示众。在众将领劝说下,割发代首,以儆效尤,此事才算了结。然而,为了赢得

2017-10-16 10:19:36 382

原创 【DP】【cofun1900】找硬币

【cofun1900】找硬币Description 小蛇是金融部部长。最近她决定制造一系列新的货币。假设她要制造的货币的面值为x1,x2,x3… 那么x1必须为1,xb必须为xa的正整数倍(b>a)。例如 1,5,125,250就是一组合法的硬币序列,而1,5,100,125就不是。 不知从哪一天开始,可爱的蛇爱上了一种萌物——兔子!从此,小蛇便走上了遇上兔子娃娃就买的不归路。某天,小蛇看到

2017-10-13 21:21:38 336

原创 【dfs+贪心】【cofun1624】斗地主

【cofun1624】斗地主Description Input Format 输入文件名为 landlords.in。 第一行包含用空格隔开的2个正整数T,n,表示手牌的组数以及每组手牌的张数。 接下来T组数据,每组数据n行,每行一个非负整数对ai,bi,表示一张牌,其中ai表示牌的数码,bi表示牌的花色,中间用空格隔开。特别的,我们用 1 来表示数码 A,11 表示数码 J,12 表示数码

2017-10-13 20:59:15 350

原创 【状压DP】【cofun1895】队伍统计

【cofun1895】队伍统计

2017-10-13 15:21:06 351

原创 【状压DP】【cofun1623】寿司晚宴

【cofun1623】寿司晚宴Sample Input 输入样例1 3 10000 输入样例2 4 10000 输入样例3 100 100000000 Sample Output 样例输出1 9 样例输出2 21 样例输出3 3107203Hint 分析: 题意:把一个数的集合分为两个集合,记为G,M, 显然,G中数的质因子与M中数的质因子应互不

2017-10-13 11:11:11 334

原创 【状压DP】【cofun1376】kings

【cofun1376】kingsDescription 用字符矩阵来表示一个8x8的棋盘,’.’表示是空格,’P’表示人质,’K’表示骑士。 每一步,骑士可以移动到他周围的8个方格中的任意一格。如果你移动到的格子中有人质(即’P’),你将俘获他。但不能移到出棋盘或当前是’K’的格子中。 请问最少要移动多少步骑士才能俘获所有的人质。Input Format 第一行一个整数N(<=5),表示有多少个

2017-10-13 09:49:02 640

原创 【状压DP】【cofun1374】trip

【cofun1374】trip分析:宝藏数<= 13,考虑状压DP。 ①bfs出宝藏,起点,终点之间的距离。 ②把起点,宝藏,终点压进二进制(0:该宝藏已取到/ 1:该宝藏未取到),状压DP转移方程:s[i][j] = min(s[i][j], s[i - (1 << j)][l] + d[l][j]);s[i][j]:取到第i个宝藏状态为j的最少步数。代码:#include <bit

2017-10-13 08:35:19 322

原创 【状压DP】【cofun1760】angrybirds

【cofun1760】angrybirdsDescription 分析: 1 <= n <= 18 考虑状压DP ①显然函数种类<=n^2,用数组g[i][j]表示打i,j这两只小猪的函数能打到的所有小猪的情况(0:该小猪在函数上/ 1:该小猪不在函数上),可解方程求出函数,然后判断小猪是否符合函数。 ②状压DP,转移方程: f[i | g[j][k]] = m

2017-10-13 07:47:29 355

原创 【状压DP+高精】【cofun1370】走道铺砖问题

【cofun1370】走道铺砖问题Description 有一个专门为装修设计方案的设计师。在某一天,他接到了一个项目,为一栋正在修建的大楼设计走道的地板铺设方案。此项目的委托人事先便进行了说明:地板砖只有1×2一种规格,而整栋楼中同类走道又有许多个,他不想其中有任何的两个出现重复的设计方案。因此,设计师必须确定其可行性,即对于一个N×M(N×M为偶数)的走道,用N×M/2块1×2的地板砖将其铺满

2017-10-13 01:00:21 1541

原创 【状压DP】【cofun1373】中国象棋(cchess)

【cofun1373】中国象棋(cchess)Description 在N行M列的棋盘上,放若干个炮(可以是0个),使得没有任何一个炮可以攻击另一个炮。 请问有多少种放置方法,中国象棋中炮的行走方式大家应该很清楚吧.Input Format 两个整数n,m Output Format 方案总数 mod 9999973Sample Input 1 3 Sample Output 7Hin

2017-10-13 00:05:30 691

原创 【状压DP】【cofun1368】炮兵阵地

【cofun1368】炮兵阵地Description 司令部的将军们打算在NM的网格地图上部署他们的炮兵部队。一个NM的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图。在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队);一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,

2017-10-12 23:42:58 690

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

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

2017-10-12 23:28:33 390

空空如也

空空如也

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

TA关注的人

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