摘要:
T1 数据仅有 52,极小的数据范围导致这题只有一个问题:如何简短方便的去重并统计。 我选择了 map 做法:每个输入查找 map 中之前是否记录过此元素,如果记录过则证明已经拥有这张牌,反之则记录并将统计数增加。 代码如下: #include <bits/stdc++.h> using names 阅读全文
摘要:
LCA,最近公共祖先问题。 给定一颗有根树,若节点 k 既是节点 x 的祖先,又是节点 y 的祖先,则称 k 是 \(\lbrack x, y \rbrack\) 的公共祖先。在 \(\lbrack x, y \rbrack\) 的所有公共祖先中,深度最大的称为最近公共祖先,记作 \(\operat 阅读全文
摘要:
什么是倍增? 倍增,从字面及数学的角度就是 ”成倍增长“ 的意思。这能使线性问题转化为数级处理,优化时间复杂度。 不是人话是不是?听不懂是不是? 看这里。这是指我们在进行递推时,如果状态空间很大,通常的线性递推无法满足时间与空间复杂度的要求,那么我们可以通过成倍增长的方式,只递推状态空间中在 \(2 阅读全文
摘要:
算法用途: Floyd 算法是用于解决两点间最短路径的一种算法,可以处理有向图或负权的最短路问题。 该算法时间复杂度为 \(O(N^3)\),空间复杂度为 \(O(N^2)\) 。 算法原理 Floyd 算法基于动态规划实现。 Floyd 算法一直在解决一个问题,寻找 \(i \rightarrow 阅读全文
摘要:
DP 概述 DP(Dynamic programming,全称动态规划),是一种基于分治,将原问题分解为简单子问题求解复杂问题的方法。 动态规划的耗时往往远少于朴素(爆搜)解法。 动态规划 and 递归 之前说过,动态规划也是分治思路,而递归更是传统的分治思路,但时间复杂度却大相径庭,为什么呢? 动 阅读全文