- 博客(16)
- 收藏
- 关注
原创 [学习笔记]线性基
线性基是什么最常用的线性基是用来解决与异或有关的一类题目的,当然也有实数的线性基。就是由一个原集合 S\mathbf{S}S 构造出另一个集合 T\mathbf{T}T,然后可以通过 T\mathbf{T}T 中任取若干个元素按照一定的规则进行组合得到 S\mathbf{S}S (比如说 T\mathbf{T}T 的张成为 S\mathbf{S}S)。感性上和向量的基底的特性比较像。线性基的构造异或线性基每个数逐个插入线性基并维护。二进制下拆分数 xxx,从高位向低位扫。若第 kkk 位为
2022-01-07 21:27:35
393
原创 [学习笔记]乘法逆元
逆元是什么以及为什么要使用逆元逆元的作用:在模意义下做乘法的逆运算。在实数运算中,除以一个数,等于乘上这个数的倒数。而现在在模意义下,逆元就充当了“倒数”的角色,模意义下乘上逆元就相当于除以了一个数。逆元定义:如果一个线性同余方程 ax≡1(modb)ax \equiv 1 \pmod bax≡1(modb),则 xxx 称为 a mod ba \bmod bamodb 的逆元,记作 a−1a^{-1}a−1。所以求逆元实际上就是求如下方程的解:ax≡1(modp)ax \equiv 1 \pmod
2022-01-07 21:26:04
1561
1
原创 [学习笔记]动态规划的优化
这一部分自己学的比较少,所以内容比较少……后面学了会增加内容。(然而事实上学了之后由于时间少也没时间更新了)对于动态规划问题,我们顺利地设计出状态和转移只能解决一部分问题,而很多问题需要我们进行时间和空间上的优化才能通过,所以我们要进行动态规划的优化。空间复杂度的优化这不是重点,因为现在空间不是很重要,大部分的题目的空间限制都是足够的,但是不排除有些 毒瘤 特殊的题目卡空间,这就需要我们优化空间复杂度。介绍一下空间复用思想:在很多算法中,尤其是动态规划中,一块空间只会被利用很少的次数然后就毫无用处了
2022-01-07 21:25:01
855
原创 [学习笔记]状态压缩动态规划
推荐阅读:《浅谈状压DP》。简介状态压缩类动态规划(简称状压DP)也是一种很特殊的 DP 算法,其精髓就是将所有物品的状态(一般是选或不选,用01表示,当然也有特殊情况)压缩成一个整数,进行状态的转移并节约空间。使用情境使用情境还是很明显的,有以下特征:每个物品的可能状态数比较少,比如要么选要么不选,就两种可能;数据范围的某一个维度非常小,一般在 20 以内(这个提示可以说是很明显了,要么搜索要么状压)时间复杂度状压 DP 的时间复杂度一般都为指数级,即不能在多项式内的时间复杂度解决,这
2022-01-07 21:21:47
471
原创 [学习笔记]树形动态规划
关于树形DP树形动态规划,顾名思义,就是在树的数据结构上做动态规划。由于树天生就是一种递归的数据结构,因此树形 DP 的实现方式通常都是用记忆化搜索。因为转移有 push 和 pull 型两种,自然树形 DP 的转移也有两种顺序:叶 →\rightarrow→ 根,算出一个节点的子节点信息后得到该节点的信息,这一种转移顺序比较常用;根 →\rightarrow→ 叶,这种转移顺序极为少见,但是也不是没有。(路人:你这不是废话树形 DP 的时间复杂度初学者可能会分析错,大多数普通的题目都是 O(
2022-01-07 21:20:18
683
原创 [学习笔记]区间类动态规划
区间类动态规划是一种比较特殊的动态规划,以区间作为动态规划的阶段,套路性比较强。怎样的套路?状态的表示一般都是:设 dpi,jdp_{i,j}dpi,j 为从 iii 到 jjj 的区间的XXX。转移的顺序也很固定,基本都是先求小区间,再求大区间。我们甚至可以写出一个区间 DP 的模板://初始化for(int len = 1; len <= n; len++) //枚举区间长度//len的初始值不一定为1,需要看具体情况{ for(int i = 1; i + len -
2022-01-07 21:19:21
383
原创 [学习笔记]线性状态动态规划
线性状态动态规划是最基础的一类动态规划,它是具有线性阶段划分的动态规划。个人认为熟练掌握动态规划算法没有什么捷径,就是多做题,多练习,多思考,多理解吧。另外,解决一些问题的一种手段就是将自己已经会的经典问题进行变形转化,以解决该问题。(这好像叫化归思想来着)所以我们就要看一看一些经典的线性状态DP问题:LIS问题,LCS问题和背包问题我知道背包问题理论上应该不算线性状态动态规划的范畴,但是这篇文章不打算写太多内容,所以为了各篇篇幅的统一性就把背包问题放进这里来了。有关这些经典问题的好博客和好文章太
2022-01-07 21:18:28
369
原创 [学习笔记]动态规划的一些基本概念和杂项
动态规划是什么?在学习一个算法之前,我们肯定要知道它是什么。在笔者看来,与其说动态规划是一种算法,不如说它是一个思想。怎样的思想呢?将大问题分解成本质相同但规模更小的子问题求解,再根据子问题的解求出原问题的解。这和分治算法的思想极为类似。不做重复的事情。如果一个问题已经被求解过了,我们就不要再求解它了。说到这儿可能很抽象,我们来根据实际问题举一个例子:Luogu P1255 数楼梯(先不要考虑高精度算法。)这是一个十分基础的动态规划问题。首先,如果你不会动态规划,那么你的想法应该是暴
2022-01-07 21:17:36
413
原创 Codeforces Global Round 9 解题报告
CF1375A Sign Flipping非常简单的一道构造题。首先,nnn 必定为奇数,那么 n−1n-1n−1 必定为偶数,即相邻两数差的个数也是偶数。题目里说了至少有 n−12\dfrac{n-1}{2}2n−1 个差为非负,也至少有 n−12\dfrac{n-1}{2}2n−1 个差为非正。注意到相邻两数计算的方法为 ai+1−aia_{i+1}-a_iai+1−ai,那么不难想到我们只要让 aia_iai 的符号按“正、负、正、负、正……”的顺序排列就可以了。这样一来,差的正负就
2020-07-06 18:39:39
275
原创 CF1336B Xenia and Colorful Gems 题解
CF题目传送门首先,很显然,要让 (x−y)2+(y−z)2+(x−z)2(x-y)^2+(y-z)^2+(x-z)^2(x−y)2+(y−z)2+(x−z)2 的值尽可能小,x,y,zx,y,zx,y,z 三个值就要尽可能接近。于是我们考虑,枚举其中一种宝石的所有重量,然后在另外两种宝石的重量中找到最接近它的值,最后找到最小的答案。为了便于枚举所有情况,我们可以确定下 x,y,zx,y,z...
2020-04-23 09:48:31
381
原创 CF1343D Constant Palindrome Sum 题解
也许更好的阅读体验CF题目传送门打比赛的时候这道题没想出来,等到想出来的时候比赛结束了……qwqqwqqwq下面进入正题:(前一部分我会复盘我的思路过程供大家参考,当然这是一个蒟蒻的思考过程, 大家完全可以跳过)首先拿到题目,先想了下能否贪心,发现找不到贪心策略。毫无头绪,我开始尝试寻找突破口。这时我发现题目有一点比较奇怪:题目给了 kkk 的范围还保证 ∑k≤2×105\sum k \...
2020-04-22 15:18:47
937
5
原创 Codeforces Educational Round 84 题解
CF1327A Sum of Odd Integers我才不会告诉你们这道题我错了3次才AC首先我们要明白一个事实:奇数个奇数的和是奇数,偶数个奇数的和是偶数。如果我们要把 nnn 拆成 kkk 个奇数(先不考虑拆成不同的奇数),nnn 与 kkk 的奇偶性必须相同。于是我们得到:条件1:nmod 2=kmod 2n \mod 2 = k \mod 2nmod2=kmod2接下来我们...
2020-03-25 13:25:14
284
原创 Codeforces Round #628 E. Ehab's REAL Number Theory Problem 题解
E. Ehab’s REAL Number Theory Problem我的数学老师有一句至理名言:题目当中没有废话!于是,当我看到这道题,我发现有一句话至关重要:Every element in this array has at most 7 divisors.解读一下就变成了:该数组中每个元素的质因子不超过2个。这个条件肯定有用。接着思考一下:如果我们将一个数质因...
2020-03-17 08:52:02
349
原创 Codeforces Educational Round 83 题解
CF1312A Two Regular Polygons这题是道数学题没错,不过是道特别简单的数学题。很明显只要 n mod m=0n\ mod\ m=0n mod m=0 答案就是 YES,否则就是 NO 。代码如下:#include<iostream>using namespace std;int main(){ int t;...
2020-03-10 12:37:05
358
原创 Codeforces Codecraft-20(Div. 2) 题解
这场比赛打得……真稀烂文章目录A. Grade AllocationB. String ModificationC. Primitive PrimesD. Nash MatrixA. Grade Allocation原题链接其实平均数不变的实质就是所有学生的分数总和不变。由于每个学生的分数最少为0,所以我们只要把除了第1名学生之外的所有学生的分数全部给第1个学生就能使他的分数最大。不过...
2020-03-05 13:58:12
642
原创 Codeforces Round #622(Div. 2) 总结&题解
先来写题解部分A. Fast Food Restaurant题目请自行看链接,这里不再赘述:A题我看到这道题的第一反应,其实不是暴力,而是贪心。(神奇)首先我们先给客人上只包含一种菜的菜肴,然后再上两种菜的,最后再上三种菜的。(所以答案最大为7)//以下的代码我用数组是为了减少if语句的数量计算只有一道菜的代码很简单,见下: int a[3]; cin >> a[0] ...
2020-02-25 11:55:52
326
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人