摘要: 处理何种问题:常用于动态更新情况下的求区间和,LIS里的求最大值也用到了树状数组。 时间复杂度:单次更新和求和的时间复杂度都是O(logn) 原理:lowbit()函数是整个树状数组的核心,但是在这里我就不说他的理论基础了,只说一下它的功能,例如:给一个原始数组A[]:1,2,3,4,5,6,7,8 阅读全文
posted @ 2018-09-05 17:07 逃往火星的猫 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:给定一个字符串,求出其最长回文子串的长度。 性能:虽然代码有两层循环,但是内层循环跑的次数之和为n,所以时间复杂度为O(n)。 原理:由于回文分为偶回文(比如 bccb)和奇回文(比如 bcacb),而在处理奇偶问题上会比较繁琐,所以这里我们使用一个技巧,具体做法是:在字符串首尾,及各 阅读全文
posted @ 2018-09-04 20:51 逃往火星的猫 阅读(156) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:对于任何一个大于1的自然数num,num可以唯一分解为有限个质数乘积,如:num=的形式。(补充:这里的唯一的意思是在不考虑排列顺序的情况下) 性能:时间复杂度为O(sqrt(num)) 原理:唯一分解定理 实现步骤:类似于素数筛的求素数方法。 备注:当数据量大时建议先用素数筛把素数都 阅读全文
posted @ 2018-09-04 20:27 逃往火星的猫 阅读(412) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:已知一个原序列,求出其最长的一个子序列,且该子序列是单调递增的。(对于其子序列的要求条件是,可以不连续,但是先后顺序不可改变) 性能:普通DP为O(n^2),贪心+二分为O(n*logn),DP+树状数组O(n*logn)。 原理: 贪心+二分解释不出原理,网上的资料个人感觉不是很有说 阅读全文
posted @ 2018-08-30 20:40 逃往火星的猫 阅读(202) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:给定顶点坐标均是整点的任意多边形, S(面积) = a(内部格点数目) + b(边上格点数目)/2 - 1 。 如图所示: S=14.50 a=11 b=9(最上方的边内有一整数点) 性能:时间复杂度为 O(n)。 原理:皮克定理我在这里就不贴证明资料了。对于多边形面积的求法用的是叉积 阅读全文
posted @ 2018-08-21 20:57 逃往火星的猫 阅读(1311) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:给定n种物品和一个容量为V的背包,物品i的体积为vi,其价值为pi,以及数量numi,求其最终可以装进背包的物品最大价值。 性能:时间复杂度为O(nV) 原理:客观上来说,可以将其直接看做01背包(只不过相同的物品很多),但会因为物品数量太多造成超时。针对这个问题,我没将物品数量进行分 阅读全文
posted @ 2018-08-18 21:05 逃往火星的猫 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:面对一个多边形,求其面积,对于多边形无限制条件,但是对于构成多边形的点必须是逆时针顺序给出。 性能:在点已呈现逆时针顺序的情况下,时间复杂度为O(n)。 原理: //点的记录必须要逆时针顺序 所记录的面积是有向面积 实现步骤:略 备注:对于叉乘求面积,适用凸边形和凹边形,只要构成边是逆 阅读全文
posted @ 2018-08-18 16:57 逃往火星的猫 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:给定 n 种物品(每种类型无限)和一个容量为 V 的背包,物品 i 的体积为 vi,其价 值为 pi,求其最终可以装进背包的物品最大价值。 性能:时间复杂度为O(nV)。 原理:在学习背包之前,可能是思考方向的不对的原因,导致对背包题解的做法有些误解,现在借着写完全背包我在这里阐述一下 阅读全文
posted @ 2018-08-17 20:49 逃往火星的猫 阅读(142) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:有两堆各若干的物品,两人轮流从中取至少一件物品,至多不限,或从两堆中取相同件物品,规定最后取完者胜利。 性能:博弈题,有规律,O(1)的时间复杂度。 原理: 先说结论:若两堆物品的初始值为 (x,y) ,且x<y,则另z=y-x; 记w= ; 若w=x,则先手必败,否则先手必胜。 推论 阅读全文
posted @ 2018-08-17 14:16 逃往火星的猫 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 处理何种问题:有n堆物品,每堆物品数为 arr[i] ,双方轮流从中取物品,每次只能从一堆物品中取任意件物品,最少取一件,取到最后一件物品的人获胜,求谁最后获胜。 性能:因为是有公式,所以时间复杂度为O(n)。 原理:结论:把每堆物品数全部都异或起来,如果得到的值为0,那么先手必败,否则先手必胜。 阅读全文
posted @ 2018-08-16 16:59 逃往火星的猫 阅读(192) 评论(0) 推荐(0) 编辑