算法思考
文章平均质量分 57
Shawy Yum
而今我谓昆仑:不要这高,不要这多雪。
展开
-
关于背包dp的思考
这篇文章是本人学习背包dp的阶段性总结,涵盖了本人的心路历程和思考: 总结一:枚举的方式及本质。 考虑bitset。 当n比较小时(n <= 128),忽略是否合法,完全可以用一串二进制数字表示选择方案。 如: 当n = 7时,0001101即可表示选择了第1,3,4件物品(从右开始)。 而由于多数情况下,n > 128,导致使用状压会超过c/c++的最大范围__int128,即不能使用状压。 但这种枚举的思想,却是奠定了记忆化搜索的基础。 总结二:背包dp自记忆化搜原创 2022-01-02 23:42:06 · 313 阅读 · 1 评论 -
字符串——常见字符串匹配形式
字符串匹配实质:树上或图中,点与点或连通块与连通块,之间的,一一对应关系。 换句话说,字符串匹配的本质是图论。 说在前面—— S:模板串 T:匹配串 n:S长度 m:T长度 常见形式—— 1.判断S的子串中是否含有T 子串:S中遵照原序的任意集合,包含空集。 比如S:abcd,那么ad便是S的一个子串。 做法:双指针 时间复杂度:O(min(n,m)) int head = 0, tail = 0, cnt = 0; while (head < n原创 2022-01-27 15:31:17 · 1277 阅读 · 0 评论 -
关于线性dp的思考
我们最先接触到的线性dp一定是走楼梯,或者说斐波那契数列: fib[0] = fib[1] = 1; for(int i = 2; i <= n; i++) fib[n] = fib[n - 1] + fib[n - 2]; 通过现象看本质—— 1.前继性: 在状态转移时,对于第n个fib_num,只受到其前两个数字即第n-1个fib_num和第n-2个fib_num的影响。 2.后承性: 同时,由于第n个fib_num取得正确值,确保了后续状态转移后所得fib_num的正确性。 总结原创 2022-01-05 23:06:33 · 363 阅读 · 0 评论