![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
Krasjet_Yu.
希望以后回忆现在的日子,发现自己做的是对的。
展开
-
字符串中特定子序列出现的次数(动态规划)
题目:给定一个字符串,求子序列 “cwbc” 出现的次数思路:动态规划令 dp[i][j] 表示前 i 个字符中匹配了字符串 “cwbc” 中前 j 位(j = 1,2,3,4)的个数。转移方程:dp[i][1] = ( dp[i - 1][1] + ( s[i] == ‘c’ )) % Moddp[i][2] = ( dp[i - 1][2] + ( s[i] == ‘w’ ) * dp[i - 1][1] ) % Moddp[i][3] = ( dp[i - 1][3] + ( s[i] =原创 2021-03-09 17:06:19 · 3114 阅读 · 3 评论 -
子序列个数——动态规划
题目:统计一个字符串中全部不同的子序列的个数思路:动态规划求解令 f[i] = 前 i 个元素中包含的全部子序列的个数那么状态转移方程分为下面两种情况:当第 i 个元素在前面 i - 1 个字符中没有出现时, f[i] = f[i - 1] + f[i - 1] + 1。可以看出 f[i] 分为了三个部分,其中第一个 f[i - 1] 表示前面 i - 1 长度的字符串包含的子序列个数,第二个 f[i - 1] 表示在前面 i - 1 长度的字符串后面添加第 i 个字符,第三个 1 表示第 i 个原创 2021-03-09 16:24:54 · 661 阅读 · 0 评论 -
C++求解N个数的最大公约数、最小公倍数
一、2个数的最大公约数// 辗转相除法int gcd(int a, int b){ if (b == 0) return a; return gcd(b, a % b);}// 也可以直接用STL: __gcd(a, b);二、2个数的最小公倍数int lcm(int a, int b){ int t = gcd(a, b); return a / t * b;}// (a * b) / gcd 也可以,但是a / gcd * b 是为了防止爆longlong证明: 假原创 2021-03-08 19:12:12 · 2278 阅读 · 0 评论 -
线性动态规划
一,概念篇1,动态规划:通过计算出小问题的最优解,可以推出大问题的最优解,从而可以推出更大问题的最优解,最小问题即是边界情况。2,子问题(小问题):子问题是一个与原问题有着类似的结构,但规模比原问题小的问题。3,最优子结构:动态规划的问题一般是求解全局最优解,而全局最优解是由局部的最有解一步一步推出,局部的最优解称为最优子结构。4,动态规划的基本思想:将待求解的问题划分为若干个阶段(子问题...转载 2020-02-16 20:51:52 · 291 阅读 · 0 评论 -
动态规划之区间DP详解
这几天在做有关dp的题,看到一个石子合并的问题,本来以为是个贪心,后来仔细一想压根不是贪心。贪心算法的思路是每次都取最大的,然而石子合并问题有个限制条件就是每次只能取相邻的,这就决定了它不是个贪心…我们接下来会先直接上区间DP的模板,然后结合石子合并这道经典例题来讲解。一、区间DP区间dp其实就是一种建立在线性结构上的对区间的动态规划。主要的方法有两种,记忆化搜索和递推。区间dp,顾名思义...原创 2020-02-16 20:44:15 · 2963 阅读 · 1 评论 -
动态规划之0-1背包问题以及其空间优化讲解
开始背包问题讲解前,我们先粗略的了解一下动态规划。动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。一、0-1背包问题给定n个重量为w1, w2, w3, … , wn, 价值为v1, v2, v3, … , vn 的物品和容量为C的背包,求这个物品中一个最有价值的子集,使得在满足背包的容量的前提下,包内的总价...原创 2020-02-12 21:41:07 · 1664 阅读 · 0 评论 -
常见的字符串处理——摘抄的博客合集
此文章是我作为一个小白,在学习字符串处理时看到的通俗易懂的好文章。因此引用过来方便以后的复习。1.KMP从头到尾彻底理解KMP2.Manacher互联网侦察微信公众号讲解,虽然文章很长,但是他讲解的十分清楚3.ac自动机讲述了AC自动机的基本思想和实现原理,如何构造AC自动机,着重讲解AC自动机在算法竞赛中的一些典型应用...原创 2019-11-12 22:12:34 · 80 阅读 · 0 评论