![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
经典
qq_38232157
这个作者很懒,什么都没留下…
展开
-
HOJ 5627 Clarke and MST(最小生成树变形,经典)
最小生成树变形,经典题目意思:有n个点,m条边。 然后问,求其中一个生成树,使得这个树的每一条边长度 全部 进行 与 运算,得到的结果最大。其中,边长度 <= 1e9, 长度在 int 的范围。本题要点:1、int 有 32 位。vector v[32]; // v[k] 存放的是边权 的第k位二进制是 1 的边的编号。2、从最高位 k 开始, 如果 v[k].size() >= n - 1, 说明有 n - 1 条边,可能够成一个生成树,使得每一条边 进行 与运算后,其值不原创 2020-09-05 18:45:32 · 158 阅读 · 0 评论 -
UVA 1600 Patrol Robot(算法竞赛入门经典,bfs,经典)
算法竞赛入门经典177页,bfs,经典题目意思:有一个 n * m 大小的矩阵, 矩阵 只要数字 0 或者 1,0 表示空白可以走,1 表示有障碍物。现在,要求 从起点 s(1, 1) 走到终点 t (n, m), 这两点都是空白。 每次走,可以连续穿过 k 个障碍物。问,从 s(1, 1) 到 t (n, m) 至少走多少步。本题要点:1、这里的 “连续穿过 k 个障碍物” , 不一定是只要沿着一个方向走,这里的走可以是拐弯的走法。所谓的拐弯,比如,从 点 (1, 1) ,右,下,下,左,原创 2020-09-02 18:47:02 · 87 阅读 · 0 评论 -
HOJ 5184 Brackets(卡特兰数,棋盘问题的推导,经典)
卡特兰数,棋盘问题的推导题目意思:定义了括号的合法排列方式,给出一个排列的前一段,问能组成多少种合法的排列本题要点:1、推导过程:n对括号排列,左括号看做是在棋盘沿着 x 方向走, 右括号看做是在棋盘沿着 y 方向走.前面的任意k个括号,左括号的数 >= 右括号的数。相当于在棋盘走,没有超过 y = x 这条线。这就是卡特兰数的定义。2、现在问题有所加深:题目给出一部分括号排列的总长度为 n ,左右括号各为 m = n / 2 个。当给定的排列方式完全合法的时候,剩下需要排列的左右括原创 2020-08-29 17:23:52 · 252 阅读 · 1 评论 -
HOJ 4372 Count the Buildings(第一类斯特林数,经典)
第一类斯特林数题意:一排房子,总共N幢,高度为1~N,从左边能看到F幢,从右边能看到F幢,问房子排列的可能本题要点:1、题目转化为第一类斯特林数:点这里最高的房子必然两边都能看到, 设编号为n, 把n固定。然后左边看到 f - 1 栋房子, 右边看到b - 1 栋房子。 左边的房子分为 f - 1 组, 右边的房子分为 b - 1 组。每一组选一个最高的房子出来做代表。那么楼n的左边,从左到右,组与组之间最高的元素一定是单调递增的,且每组中的最高元素一定排在该组的最左边,每组中的其它元素可以任原创 2020-08-29 00:49:48 · 99 阅读 · 0 评论 -
HOJ 3240 Counting Binary Trees(卡特兰数,扩欧求逆元,经典)
卡特兰数,扩欧求逆元题目意思:n个节点的二叉树,可以构成有 catalan[n] 种不同的二叉树。 sum[n] 是卡特兰数前 n项的总和。每次给出两个数 n, m, 求 sum[n] % m 是多少。本题要点:1、n很大,如果用大数来存第 100000 个卡特兰数,肯定超时。2、卡特兰数的 递推公式h[i] = h[i - 1] * (4 * i - 2) / (i + 1)要求每一个卡特兰数 对m的模, 这里有除法,需要 求 (i + 1) 在模 m的情况下的逆元。3、扩展欧几里得算法原创 2020-08-28 16:59:19 · 125 阅读 · 0 评论 -
HOJ 1024 Max Sum Plus Plus(线性DP,滚动数组,经典)
题目意思:本题的大致意思为给定一个数组,求其分成m个不相交子段和最大值的问题参考:https://www.cnblogs.com/kuangbin/archive/2011/08/04/2127085.html状态dp[i][j]有前j个数,组成i组的和的最大值。决策: 第j个数,是在第包含在第i组里面,还是自己独立成组。方程 dp[i][j]=Max(dp[i][j-1]+a[j] , max( dp[i-1][k] ) + a[j] ) 0<k<j空间复杂度,m未知,n<原创 2020-08-02 11:15:36 · 77 阅读 · 0 评论 -
POJ 3414 Pots(广搜,路径输出,经典)
广搜, 参考 https://blog.csdn.net/tigerisland45/article/details/52208174题目意思:给出两个壶的容量A和B, 一个目标水量C,对A、B可以有3种操作,求最少经过几步操作能够在某个壶中得到目标水量C。输入A、B和C,输入最少操作数和操作过程。本题要点:1、状态表示:把A和B壶中水量作为状态,初始状态为<0,0>,每个操作都是状态变化的过程。因为有2个壶,所以总共有6种操作。vis[i][j] 表示第一个水杯装i, 第二个水杯原创 2020-07-29 11:21:34 · 169 阅读 · 0 评论 -
POJ 1948 Triangular Pastures(背包,经典)
题目意思:给出n条边,然后用这n条边组成一个三角形,求该该三角形的最大面积。本题要点:1、转态表示:dp[i][j] 表示三角形第一条边是i, 第二条边是j的 三角形是否存在。(i >= j)3、 转态转移:if(dp[i][j]) // 扫描第k条边的时候{dp[i + a[k]][j] = dp[i][j + a[k]] = 1; }4、 三条边能组成三角形的充要条件是:任意两条边的和大于第三条边。假设所有线段的总和是 s,这些线段组成的三角形的最长边是 m = s原创 2020-07-05 15:48:22 · 113 阅读 · 0 评论 -
POJ 1276 Cash Machine(分组背包,经典)
题目意思:给出金钱数和N种不同的钱币数量和面额,求出这n种面额能够凑出的不大于给出金钱数的最大值本题要点:1、多重背包,二进制拆分法:(参考 《算法竞赛进阶指南》 280页)币值为 money[i], 数量为 cnt[i] 的硬币,拆分为 2^0, 2^1, 2^2, …, 2^p , r (r = cnt[i] - 2^0 - 2^1 - 2^2 - … - 2^p)组硬币, 每组硬币的 体积为 2^k (0 <= k <= p),价值是 money[i] * 2^k 。这种方法原创 2020-07-05 15:21:19 · 131 阅读 · 0 评论