2021年7月29日
摘要: 好久没写博客了,今天来水一波。犹记得大一寒假时,我在洛谷刷题,见到了一种奇怪的题型,由于用到了很多的幂运算,最后的答案很大,要求输出其最后三位数字,我提交之后,爆了WA以及TLE,当时查看题解以及百度,说要使用快速幂取模处理,当时看了半天(真的有半天),看得一知半解,最后也没有搞懂。最近算法水平有所 阅读全文
posted @ 2021-07-29 15:55 雪之下雪乃天下第一 阅读(50) 评论(0) 推荐(0) 编辑
  2021年7月22日
摘要: LIS:即给定一个数组,找出一个最长的单调递增子序列。例如一个长度为7的序列a={5,6,7,4,2,8,3},它最长的单调递增子序列为{5,6,7,8},长度为4. 利用动态规划思想,有两种方法可以解决LIS问题。 第一种就是与LCS问题结合,将给定数组a按从小到大排序得到数组b,求出a与b的最长 阅读全文
posted @ 2021-07-22 15:37 雪之下雪乃天下第一 阅读(114) 评论(0) 推荐(0) 编辑
摘要: LCS,即最长公共子序列。子序列的元素在原序列中的元素可以非连续,而子串的元素在原序列中的元素一定连续。LCS问题就是给定两个序列X和Y,找到它们的一个最长公共子序列。 例题如下 Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Me 阅读全文
posted @ 2021-07-22 11:08 雪之下雪乃天下第一 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 01背包问题是最经典的背包问题,没有之一。 关于背包问题,我举过一个例子,有一天,阿里巴巴背着一个背包来到了山洞里,面对大量的金银财宝,他的背包却容量有限,他要如何选择呢?假如说这些财宝可以无限分割,例如是金粉,银粉,铜粉,他只要贪心地先放金,再放银,最后放铜,直到装满,那么如果这些财宝各有体积且无 阅读全文
posted @ 2021-07-22 10:37 雪之下雪乃天下第一 阅读(64) 评论(0) 推荐(0) 编辑
摘要: 动态规划是一种算法思想,可以简单解释为将复杂问题分解为许多个子问题,在无后效性的前提下一一解决,最后得到原复杂问题的最优解。 1.最少硬币问题 有n种硬币,面值为v1,v2,....vn,数量无限。输入非负整数s,选用硬币,使其和为s。输出最少硬币的组合的数量。 易得其状态转移方程为ans[i]=m 阅读全文
posted @ 2021-07-22 10:15 雪之下雪乃天下第一 阅读(735) 评论(0) 推荐(0) 编辑
  2021年7月21日
摘要: 二叉树是一种特殊的树,每次分支不超过两部分。对于二叉树的存储,可以分为两种情况讨论。 1.对于完美二叉树而言,即除了最后一层以外每个节点都有两个叶子节点的二叉树,适合使用数组存储,因为我们容易发现若从上到下,从左到右从1开始为每个节点分配编号,对于每个叶子节点i,其左儿子编号为2*i,右儿子编号为2 阅读全文
posted @ 2021-07-21 10:11 雪之下雪乃天下第一 阅读(56) 评论(0) 推荐(0) 编辑
摘要: 并查集是一种用来管理元素分组情况的数据结构,可以高效地进行如下操作。 1.合并元素a和元素b所在的组。 2.查询元素a和元素b是否属于同一组。 并查集是使用树形结构实现的,不过不是二叉树。并查集通过根节点(族长)进行操作。 合并:从一个组的根向另一个组的根连边,这样两棵树就变成了一棵树,也就是把两个 阅读全文
posted @ 2021-07-21 09:17 雪之下雪乃天下第一 阅读(39) 评论(0) 推荐(0) 编辑
  2021年7月20日
摘要: 前缀和与差分是最基础的算法,也是最简单的算法之一。不过它们是降低时间复杂度的有力算法,利用前缀和或差分进行预处理,往往可以将时间复杂度降低一个n的规模。给定一个数组a[n],设第i个前缀和为s[i],第i个差分为d[i],s[i]就是从第1个元素到第i个元素的数的总和,d[i]就是a[i]-a[i- 阅读全文
posted @ 2021-07-20 20:45 雪之下雪乃天下第一 阅读(125) 评论(0) 推荐(1) 编辑
摘要: 离散化,作为一种较为基础的算法,可以说极其常见。那么何为离散化呢?根据百度百科说法,离散化就是将无限空间的有限元素映射到有限空间上。通俗地说,就是在不改变数据相对大小的情况下,对数据进行缩小操作。举个例子,给定一串数据1,99,72,72,6,100.我们可以先对其排序,变为1,6,72,72,99 阅读全文
posted @ 2021-07-20 17:52 雪之下雪乃天下第一 阅读(176) 评论(0) 推荐(0) 编辑
  2021年7月19日
摘要: 给定一组数据(n个数据),进行m次操作,想要求某一段区间和,或者区间上同时加上或减去一个数。对于这种问题,采用最朴素的算法思想,求区间和的时间复杂度为O(mn),删改操作为O(mn^2),若使用前缀和预处理,可以将求区间和的复杂度降低至O(m),用差分预处理,也可以将删改的复杂度降至O(m)。但是如 阅读全文
posted @ 2021-07-19 20:05 雪之下雪乃天下第一 阅读(157) 评论(0) 推荐(0) 编辑