算法模版
文章平均质量分 62
samewide
不定时发点算法笔记和一些算法比赛的题解,以后可能会写点其他方向的文章
展开
-
背包问题其二(动态规划)
因此发现与01背包不同之处仅在于状态的划分,01背包对于每件物品只有选或者不选的情况,而完全背包则存在选择的数量从0到k个的情况(当选择k+1个当前的物品时体积超过限制),所以我们可以发散的思考这道题目是01234……进一步分析可以发现,对于每一件物品,我们都有两种选择,即选这件物品,或者不选这件物品(这也是这道题目被称作01背包的原因),那么我们在这两种选择中挑选最优的一种即可,通过这种方法,我们可以保证在考虑到每一件物品的时候保证当前情况是全局最优的。,用空格隔开,分别表示第 i 种物品的体积和价值。原创 2023-04-25 21:55:23 · 432 阅读 · 0 评论 -
算法模版(四)——双指针、位运算、离散化、区间合并
双指针的思路是从一个暴力二重循环优化得来的,使得其中一个指针不再向反方向走即可(但是其实有时候挺难想出来的)离散化很像前缀和操作,可以理解为在稀疏条件下的前缀和(其实我觉得叫做连续化会更好理解一点)双指针算法并没有固定的模版,具体的题目需要具体对待,下面放一道经典的题目当作模板吧。具体的思路就是把所有的距离比较远的坐标重新映射到新的数组中,把稀疏变成稠密。位运算其实并不能算一个算法,只能说是一个操作,可以用来枚举操作等。区间合并有点贪心内味,主要目的就是把有交点的两端区间合并。原创 2023-04-11 19:17:22 · 67 阅读 · 0 评论 -
算法模版(三)—— 前缀和和差分
前缀和的操作可以类比数学中数列的前n项和,当我们在频繁询问某个区间内元素之和的时候,使用前缀和数组首先预处理,再进行查找,可以将每一次的询问复杂度下降到。注意差分操作一定要使用另一个数组来储存,同一个数组会出错。原创 2023-04-11 18:55:23 · 64 阅读 · 0 评论 -
算法模版(二)—— 高精度
在C++中,不能处理位数非常大的数字进行计算,因此需要使用数组来模拟高精度。(python则不需要,因为其自带高精度)原创 2023-04-11 18:48:44 · 61 阅读 · 0 评论 -
算法模版(一)——排序和二分查找
用两个指针分别指向两个区间的左端点,两个指针一起向后,比较两个数字大小,把更大的数字放在前面,同时更大的指针++,直到有一个指针到达区间右端点,最后把剩下的数字接在后面。遇到小于x的数字时停下,此时交换两个指针指向的数字,重复上述步骤,直到两个指针相遇,这就完成了一次分界。(注意这里的时间复杂度是平均时间复杂度,最高的时间复杂度是。顺便附一张图,用不同的符号一定是取决于要的是哪一个值。也是基于分治的思想,分别排序左边和右边。原理太简单,直接给模板,复杂度是。直到遇见大于x的数字时停下,指向最左侧和最右侧,原创 2023-04-10 14:06:00 · 65 阅读 · 0 评论