随笔分类 - 算法/数据结构
摘要:递归写法,好久不写很容易就gg了... dp[i]=max(dp[j])+1,并且s[i]XORs[j]<=x 01字典树优化一下转移。 1 #include <bits/stdc++.h> 2 3 #define ll long long 4 #define ull unsigned long l
阅读全文
摘要:整体二分可以算作是普通二分的进化版。普通二分可以解决多个操作,单个询问。时间复杂度为O(所有操作的复杂度f(n)*logC), C为需要二分的答案范围。 那么Q个询问呢?显然所有操作的复杂度是 > O(n)的,每个询问所有操作来一遍,那么就变成O(Q*所有操作的复杂度f(n)*logC), 复杂度就
阅读全文
摘要:课件链接 CDQ分治 [BOI2007]MOKIA 题意:一个2000000*2000000的棋盘,每个格子有一个数,维护两种操作: ADD x, y: a A[x, y] += a; QUERY x0, y0, x1, y1: 询问矩阵内的和。 CDQ分治时按x维排序使用扫描线,y维使用树状数组。
阅读全文
摘要:关于CDQ分治,首先需要明白分治的复杂度。 T(n) = 2T(n/2)+O(kn), T(n) = O(knlogn) T(n) = 2T(n/2)+O(knlogn), T(n) = O(knlog^2n) T(n) = 2T(n/2)+O(k), T(n) = O(kn) 那么我们要处理[l,
阅读全文
摘要:题意:共n张无中生有,m张攻击牌。每张攻击牌攻击力已知,敌方有p点血。随机洗牌。游戏开始,己方抽取一张手牌,若是无中生有则可再抽两张牌。求能在第一回合内将敌方杀死的概率。 n+m <= 20, p <= 1000; 很明显,与卡特兰数有关,原先栈内数量为1,抽到无中生有即入栈,否则出栈。 枚举攻击牌
阅读全文
摘要:DAG图。 f[i][j][k] = ∑f[ii][jj][kk],ii,jj,kk分别为i,j,k的直接后继 时间复杂度是O(n^6)的,需要优化。 另开一维枚举当前要走的人。 我们假定先走k,再走j,最后走i,目前在i,j,k。 f[i][j][k][0]表示k,j,i走完下一轮继续走k,j,i
阅读全文
摘要:题意转换为:给定n个数,求两个最长的不相交的LIS。 dp[i][j]表示当前两个LIS末尾为i和j时的dp值。(其实是 <= i和 <= j时的dp值) dp[i][j] = max(dp[i][k])+1, k <= j; 我们只要先将答案存在一个数组里,然后统一更新dp数组的行值与列值即可。
阅读全文
摘要:拍照 树状数组(SB了)。求出静止状态下,每个点能看到多少个向右开的船c1[i],多少个向左开的船c2[i]。 max{c1[i] + c2[j], (满足i <= j) }即为答案。从后往前枚举i即可。 注意要离散化,否则会Tle。 1 #include <bits/stdc++.h> 2 typ
阅读全文
摘要:All X 等比数列求和一下 A/B MOD C = A MOD (B*C) / B 或者分治一下 Sitting in Line 状压+拓扑dp dp(i, j)表示当前二进制状态为j,当前状态的最后一个数字是a[i],然后按照拓扑序dp进行更新,并用一个bool数组记录是否在队列中。 网上还有其
阅读全文
摘要:首先是 Martrix67 的博文:http://www.matrix67.com/blog/archives/682 然后是morejarphone同学的博文:http://blog.csdn.net/morejarphone/article/details/50677172 因为是偶然翻了他的这
阅读全文
摘要:链表的数据结构体: 链表反转:设置三个指针,从前往后扫。 反转中间某段: Leetcode25. Reverse Nodes in k-Group 另起一个函数反转中间某段,注意指针为引用型。翻转的时候,依然需要三个指针。 ——————————————————————————————————————
阅读全文
摘要:以下为弥补ACM算法以外的知识点: ———————————————————————————— 内部排序的时间复杂度有O(n^2), O(nlogn), O(d·n) 概括一些常听说的但却不太认识的一些排序方法: 希尔排序:缩小增量排序,属插入排序类。(直接进行插入排序复杂度很高,可先按增量排序,使整
阅读全文
摘要:二分查找经常写挂,最常写挂的就是陷入一个死循环,如何避免呢? 网上有很多版本的二分代码。循环条件有:l < r的,有l+1 < r的,有l <= r的。做个总结吧。 一、首先是二分查找一个值,找到返回其下标,否则返回-1。 二、查找边界值 在有序数组中找到“正好大于(小于)目标数”的那个数。 如果找
阅读全文
摘要:题意:给定二阶魔方初始状态,问N(1 <= N <= 7)步旋转操作以内最多能使几个面相同。 dfs搜索+剪枝。 魔方的每个旋转操作即对应于一个置换操作。又因为相对运动,上层左旋一次和下层右旋一次等价,故可分为6类操作。上层顺、逆时针旋转,左层顺、逆时针旋转,前层顺、逆时针旋转。这样每次操作有6种选
阅读全文
摘要:搜索实现:解决数独有两种思考策略,一种是枚举当前格能填的数字的种数,这里有一优化策略就是先搜索能填入种数小的格子;另一种是考虑处理某一行(列、宫)时,对于某一个没用过的数字,若该行(列、宫)只有一个可行的空白格时,就只能将该数字填入此格中。第二种实现起来略麻烦,此处仅实现第一种策略,并调整搜索顺序进
阅读全文

浙公网安备 33010602011771号