随笔分类 - 数据结构与算法
一些刷题小结
摘要:完全背包 思路 朴素解法: 状态划分 f(i,j):前i个物品凑成数量j的组合数 状态转移 分析:第i个物品可以选或者不选,若不选则没有新增组合数,若选择则组合数增加,即最小的情况就是不选 因此:f[i][j] = f[i-1][j] + sum(f[i-1][j - k*value]) , k >
阅读全文
摘要:树状数组 目的 是为了优化数组、前缀和数组,因为这两个数组有如下特点: 数组: 单点修改:O(1) 区间查询: O(n) 前缀和数组: 单点修改: O(n) 区间查询:O(1) 而当需要同时进行这两种操作的时候,时间复杂度其实是取决于最坏的情况,即O(n)。 此时需要一种数据结构,能综合一下这两种数
阅读全文
摘要:拓扑排序能否成功,其实就是看有没有环 有环:说明环内结点互为前置,永远也不可能完成 无环:是线性的,可以完成 DFS方法 思路: 逆向思维,遍历到边界点(无邻接点相当于叶子),再不断回溯将结点加入到结果中,得到的是拓扑排序的逆序,进行反转即可得到拓扑序列。 遍历过程中判断是否有环。 注意:要使用vi
阅读全文
摘要:题目 在英语中,我们有一个叫做 词根(root) 的概念,可以词根后面添加其他一些词组成另一个较长的单词——我们称这个词为 继承词(successor)。例如,词根an,跟随着单词 other(其他),可以形成新的单词 another(另一个)。 现在,给定一个由许多词根组成的词典 dictiona
阅读全文