自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(89)
  • 收藏
  • 关注

原创 LeetCode 2368. 受限条件下可到达节点的数目

【代码】LeetCode 2368. 受限条件下可到达节点的数目。

2024-03-02 16:32:10 332

原创 LeetCode 189. 轮转数组

由一定的“几何上”的规律,为了实现这个轮转,可以等价地对数组实现三次逆转,其区间先后分别。

2024-03-02 15:39:22 374

原创 LeetCode 238. 除自身以外数组的乘积

【代码】LeetCode 238. 除自身以外数组的乘积。

2024-03-02 15:27:43 295

原创 LeetCode 560. 和为 K 的子数组

可以利用前缀和预处理后,枚举找到这些区间段。由于题目要求子数组必须连续,也就是需要一个。

2024-03-01 19:59:14 408

原创 LeetCode 438. 找到字符串中所有字母异位词

1. 对于判断两个词是否为**异位词**,可以改而判断它们的**词频表**是否相同。2. 基于此,在`s`串中设置滑动窗口,大小跟`p`串一样,移动(剔除左边,增加右边)这个窗口并实时记录下它的词频表然后与`p`的词频表比较。

2024-02-29 12:01:59 690

原创 LeetCode 105. 从前序与中序遍历序列构造二叉树

【代码】LeetCode 105. 从前序与中序遍历序列构造二叉树。

2024-02-28 10:58:52 441 1

原创 LeetCode 106. 从中序与后序遍历序列构造二叉树

构造函数的左闭右开性质,不要混淆。主要注意在切割数组时要结合。

2024-02-28 10:47:39 531

原创 北大C++课后记录:文件读写的I/O流

文件和平常用到的`cin`、`cout`流其实是一回事,可以将文件看作一个**有限字符构成的顺序字符流**,基于此,也可以像`cin`、`cout`读键盘数据那样对文件进行读写。

2023-09-16 18:29:34 610

原创 北大C++课后记录:自增、自减运算符重载的小Demo

自增、自减运算符有前置(++x)和后置(x++前置运算符作为一元运算符进行重载:(注意T1对象和T2对象是有差异的)后置从重载函数的实现中也可以看到,前置运算本质上返回的原对象自增(减)后的自身引用。而后置运算返回的是原对象的一个深拷贝副本(这个副本的数据展现了原对象自增(减)前的内容),因此多创建了一个对象。因此++ x可能会比x ++在时空开销上更小,从而更高效。

2023-08-30 18:15:09 182

原创 北大C++课后记录:可变长数组类的实现

【代码】北大C++课后记录:可变长数组类的实现。

2023-08-30 11:42:59 124

原创 自实现朴素贝叶斯分类器with案例:基于SMS Spam Collection数据集的广告邮件分类

1.首先要理解贝叶斯决策的理论依据,引用西瓜书上的原话:对于分类任务,在所有相关概率都已知的理想情形下,贝叶斯决策论考虑如何基于这些**概率**和**误判损失**来选择最优的类别标记。2.基于SMS Spam Collection数据集的广告邮件分类案例

2023-04-29 19:09:30 1771 2

原创 小猫爬山(DFS+剪枝)

翰翰和达达饲养了 $N$ 只小猫,这天,小猫们要去爬山。经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_

2023-04-01 23:16:09 1021

原创 贪心:区间问题

贪心真是玄学,规律全靠猜,证明全靠样例通过!给定 $N$ 个闭区间 $[a_i,b_i]$,请你在数轴上选择**尽量少的点**,使得**每个区间内至少包含一个选出的点**。输出选择的点的最小数量。位于区间端点上的点也算作区间内。**输入格式**第一行包含整数 $N$,表示区间数。接下来 $N$ 行,每行包含两个整数 $a_i,b_i$,表示一个区间的两个端点。**输出格式**输出一个整数,表示所需的点的最小数量。**数据范围**$1≤N≤10^5,$$−10^9≤a_i≤b_

2022-12-05 22:46:17 666

原创 洛谷 P4017 - 最大食物链计数(dp+拓扑序)

首先需明白,本题是一道综合了**拓扑排序**和**动态规划**应用的题。根据题给的最大食物链的定义可知:一条食物链上从**最佳生产者**到**最佳消费者**中经过的点的顺序就是一个拓扑序。在图论上的表示为,从被吃的结点具有一条有向边,指向主动吃的结点。然后定义`f[]`表示:食物网中沿从各个生产者走,走到点 `i` 时的(拓扑)路径数。状态转移,对于食物网中,如果`j`是吃`i`的,即`i ——> j`,则`f[j] += f[i]`。注意,由于可能有多个指向`j`的结点,所以这里的转移方程准确表示

2022-11-29 16:46:17 207

原创 图论 - 拓扑排序

只有有向图才可能存在拓扑序列,无向图没这个概念。如果有向图中存在一个环,那必定不可能拓扑序列,因为定义不了起点和终点。拓扑序列如果有,可能不唯一。

2022-11-29 15:06:55 729

原创 洛谷 P2196 - 挖地雷

在一个地图上有N个地窖(N≤20),每个地窖中埋有一定数量的地雷。同时,给出地窖之间的连接路径。当地窖及其连接的数据给出之后,某人可以从任一处开始挖地雷,然后可以沿着指出的连接往下挖(仅能选择一条路径),当无连接时挖地雷工作结束。设计一个挖地雷的方案,使某人能挖到最多的地雷。

2022-11-28 15:40:31 160

原创 状态压缩dp整理

包含蒙德里安的梦想以及最短hamilton路径两题的详细解释。

2022-11-23 16:56:58 265 1

原创 字符串哈希

字符串哈希号称是学了后再遇到字符串题就可以丢掉kmp的算法哈哈(当然bushi)。它是一种将**字符串**映射成**数字**的算法,如何映射的呢?利用的就是hash,其方式是将一个给定的字符串转成 **$P$进制的数字**,即对字符串每个位置$i$上的字符赋予一个**权值$P^i$**(这个权值从左到右依次递减),然后用一个数字取替该字符(**一般来讲用的是字符对应ASCII码值**)并乘上权值后相加起来,可以预想到此时的值会非常地庞大,所以再给它mod上一个限定值$Q$。用公式表示就是:> 字符

2022-11-21 20:24:57 786 1

原创 模拟hash表

一般hash表的作用是将一个**较大值域的集合**映射到另一个**较小值域的集合**,当数据量多的时候难免会有hash冲突,而为了解决这种冲突,一般有**开放寻址法**和**拉链法**。- 开放寻址法,数据映射出hash key之后按照这个位置找,如果被占用了就往下一个槽位走,直至走到一个值为`null`的槽位,然后把数据存到这个槽上(可以类比上厕所找坑位(●ˇ∀ˇ●))。- 拉链法,相同hash key的数都存在同一个hash槽上的一条链里面,虽然这个链可能会比较长,但仍然认为查询的复杂度是$O(1

2022-11-21 18:57:13 90

原创 股票买卖Ⅴ

相比于前面的股票买卖,多了一个 **“冷却期”** 的概念,而把它意思转换一下就是 **“手中无股的第1天”** ,所以需要再列出一个状态来与表示“手中无股的第2≥天”的状态区分开,因此状态机模型如下:这里入口选择“手中无股第≥2天”的原因是在该状态下,既没开始买股票(笔数=0),又由于没处在冷却期,所以此时也可以开始进行买股票。状态表示:$f(i,0/1/2)$:在第 $i$ 天时股票处于[0:手中未持股的第1天、1:手中持股、2:手中未持股的第≥2天]状态下的最大利润。

2022-11-21 14:11:01 192

原创 股票买卖IV(LeetCode)

首先,应列出该问题下的状态机模型。那么在任意一天中,应该只存在 **“手中无股”** 和 **“手中有股”** 两种状态。在`f[i][j][1/0]`如图中含义的基础下,各种状态转移的具体含义是:> ==注*:== 这里的状态转移均是考虑第$i - 1$到第$i$天或者第$j - 1$笔交易到第$j$笔交易时的状态。> > - 手中有股(1) —> 手中无股(0):说明此时进行了股票抛售,得到的利润应是`+ price[i]`,由于该事件发生后才能算作一笔完整的交易,所以它们在**一个共同的

2022-11-21 00:07:05 220

原创 大盗阿福(打家劫舍)

阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有N家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?输入的第一行是一个整数T,表示一共有T组数据。接下来的每组数据,第一行是一个整数N,表示一共有N家店铺。第二行是N。

2022-11-20 22:30:40 455

原创 Google Kickstart. 能量石(推公式 + 0-1背包)

根据题意,可以先考虑任意两个相邻的能量石$i$和$i + 1$,不妨比较一下两种吃它们的顺序带来的能量值:- 先吃$i$:能量值1 = $E_i +E_{i + 1}-S_i×L_{i +1}$。- 先吃$i+1$:能量值2 = $E_{i + 1} + E_i-S_{i+1}×L_i$。而我们并不知道能量值1和能量值2哪个更大,所以不妨令能量值1>能量值2(其实也可以反着令,只要下标对应好),那么可以得到结论:$S_i×L_{i +1}

2022-11-20 18:12:15 397

原创 洛谷 P1064 - 金明的预算方案(分组背包)

由于想要选择任意一个附件都必须要带上它对应的主件,那么可以不考虑该附件了,转而在遇到其主件的时候**考虑要不要带上这个附件**,那么不难想象,每个主件就必定构成了一个**背包组**,所以是一个**分组背包问题**,一个组里面就对应了多个**主附件的搭配方案**。

2022-11-18 18:09:40 721

原创 没有上司的舞会 - 树形DP

首先,如果将“上司”看作父结点,“下属”看作子结点,那么按照样例的员工从属关系,可以得到如下的一棵树。而样例输出的“5”,就是如图所示的五个蓝色结点组合而来,因为此时5号不是1、2、6、7的直接上属,可以将他们安排在同一个舞会,所以最大快乐指数就是它们的快乐指数之和。如何考虑用树形DP的方法来做呢?去或是不去舞会,即选不选中该结点。如果选中该结点,那么它的所有直接子结点(如果有)都不可以被选择,因为如果此时还选择子结点也不会得到子结点的快乐指数。

2022-11-17 17:16:09 333

原创 混合背包问题

有N种物品和一个容量是V的背包。si​每种体积是vi​,价值是wi​。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有N行,每行三个整数vi​,wi​,si​,用空格隔开,分别表示第i种物品的体积、价值和数量。si​si​si​si​输出一个整数,表示最大价值。

2022-11-16 16:31:59 64

原创 洛谷 P1803 - 凌乱的yyy / 线段覆盖

这题是利用了一个贪心的思想,要想参加的比赛数量尽可能多,言外之意就是找到一种组合使得各个比赛的时间段**不相交**的尽可能地多,那么只需使得各比赛时间段的结束时间(即右端点)尽可能地小,因为这样就留给yyy参加的机会更多,因此对于每个比赛时间段$[l,r]$,按照`r`从小到大`sort`排序一遍,然后枚举各个时间段,对没有相交的时间段依次计数即可。在计数的时候,用到了一点 **“筛”** 的想法。

2022-11-15 16:32:46 215 2

原创 筛质数(埃氏筛+欧拉筛)

由于筛数也是比较耗时间的,是否可以优化?再进一步地想,其实只需要对于那些质数进行筛数操作就行了,由于。那一步已经做了很好的优化,但仍然还是存在重复的筛数操作而浪费一定的时间,例如。,表示它被过滤出质数集合里了,这样做的好处是可以减少循环的操作次数,用。线性筛来源于这样一个事实:任何一个合数,只需要利用它的。,数学上的证明还可再查相关资料。的可以知道,合数一定会是被它的。这个重复的操作,所以只在确定了。共一行,包含一个整数,表示。,注定不可能是质数,因为这个。筛了就行了,再或是对于。给筛掉的,而不会造成。

2022-11-13 20:54:48 467

原创 货币系统类的题(计数型DP)

根据题意理解,其实就是把$(n,a)$这个货币系统简化,简化成在系统里任意面值的`a[i]`均不能被其它货币**线性地表示出**。例如对于**样例1**:19可以由10 + 3 + 6线性组合出来,因此19在这个系统里就是冗余的,可以剔除,同理6也可已被3 + 3线性地表示出来,因此剔除掉,最后就只剩下3、10这两个数了,因为它们不能被互相线性表示出来,所以3、10就是样例

2022-11-13 15:56:38 350

原创 货币系统(求方案数的背包)

问题,但与传统背包不同的是,这里要求解的不再是最大价值,而是。,再细想可以发现各种面值的货币是无限的,所以这显然是一个。的循环顺序要从小到大(v—>m)地进行,这样保证了。行,每行包含一个整数,表示一种货币的面值。首先,可以将货币看成是一种背包,背包的。因此,状态表示和转移方程都会有点变化。共一行,包含一个整数,表示方案数。种面值的货币系统,求组成面值为。红框内都是相等的,所以只需用。观察,可以看到当维护到。的时候,需要有上一轮即。的货币有多少种方案。第一行,包含两个整数。张来凑成一个新方案。

2022-11-13 14:34:28 873 1

原创 HDU 1272 - 小希的迷宫(并查集判树)

按照房间之间的限制描述再结合给的图片观察就可以知道,要判断建出来的迷宫(图Graph)是否满足要求,其实就是要判断这个图是不是一棵**树**,仅此而已。那么什么是树呢?对于本题,只要满足这两个要求就能判定图是为一棵树:- 图中不能存在**环**。- 图只能存在一个**连通块**。因此,可以借助并查集,将所有结点慢慢归并到一个集合(生成树)里,那么好处是,在建图的时候,对于两个将要建边的结点,先判断它们是否已经在同一集合里(其实就是同一树上),如果已经在了,那么注定**加入这条边后构成环**,说

2022-11-12 23:06:25 130

原创 HDU 2612 - Find a way(两遍广搜)

这里有个坑点,并不是每个kfc门店都是Y、M可以到达的,所以要对Y(M)_to_kfc初始化为无穷大。表示KFC点的坐标,并且给定了这两名同学的坐标,现在题目要求是,找到一个最近的KFC店走法,使得他们。地图上有很多家KFC店,Y同学和M同学约定到同一家KFC店就餐,他们只能。//分别映射Y、M走到各个kfc点的距离。很显然,就是对Y同学和M同学各进行一遍。,然后将他们到各个kfc门店的。地移动,每移动一格需要。,因为如果每次找到的。

2022-11-12 22:37:32 512

原创 洛谷 P2782 - 友好城市(最长上升子序列模型)

假设有两个城市对(按南岸坐标的顺序排列):南岸1-北岸1、南岸2-北岸2。很显然,如果这两个城市之间路线交叉,注定有**北岸1 > 北岸2**。所以为了得到不交叉路线方案,需找出那些能使**北岸1 < 北岸2**的组合,再接着对其它的城市对推广。> 先保障南岸城市坐标从小到大有序,那么其对应的北岸城市坐标构成的**最长上升子序列**即为最优的没交叉路线的方案。

2022-11-11 22:40:38 141

原创 洛谷 P1629 - 邮递员送信(往返两遍dijkstra)

从邮局出发到各个邮寄点肯定是**单源最短路**问题,即用dijkstra,考虑到本题数据量,存图需要用带权的链式前向星,并且还要再需堆优化一下;而折返回来时就属于**多源单终点**问题,但仍可以套dijkstra做,但需要再建一个存**反向边**的图。

2022-11-11 22:24:52 266

原创 洛谷 P3916 - 图的遍历(反向建边)

- 注意到本题的数据量为$10^5$,所以果断考虑链式前向星存图。一开始的思路是将每个点**dfs**一遍,然后在dfs的过程中将能遇到的结点编号取一个max,再接着输出就可以了。没想到居然`TLE`了两个测试样例,看来这题也不简单啊>_>。- 然后也是采取了某大佬的思路,即反向建边+dfs,具体就是在建边时反着建,如样例中`a —> b`则`add(b, a)`,这样做是为了能够让`b`结点返回来找到`a`,然后最核心的一步来了:按结点编号**从大到小*

2022-11-09 19:46:51 535

原创 dijkstra的堆优化版

在这里需要优化朴素版dijkstra的原因是数据范围变大了,原本n、m在小于500的情况下即使是500那么在。接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z。条边的有向图,图中可能存在重边和自环,所有边权均为非负值。数据保证:如果最短路存在,则最短路的长度不超过 109。输出一个整数,表示 1 号点到 n 号点的最短距离。号点的最短距离,如果无法从 1 号点走到。来干这件事的,且该操作的复杂度就为。,而对于n个点,为了找到每个点到。

2022-11-08 21:33:46 693

原创 最小生成树基础模板

prim算法的核心在于先定义一个最小生成树集合,初始时这个集合只有一个点为1,然后不断将这个集合扩大,直到最后所有结点都在这个生成树集合里就结束。而扩张生成树的步骤又与dijkstra算法尤为相似。在这里,对于每个点(当然,要这个点没在树的集合里),计算出它到生成树的“距离”,这里的距离的含义是指:该点可能与生成树中的多个结点之间都有一条路径,在这些路径中选择出最短的那一条,其值就当作到生成树的距离。用数组min_dist[]表示,如就是结点i到生成树的距离。然后,再在这一堆距离集合里面,挑出。

2022-11-08 13:35:00 70

原创 HDU 1213 - How Many Tables(并查集 or dfs)

目录Problem Description首刷自解:dfs遍历二刷自解:并查集Problem DescriptionToday is Ignatius’ birthday. He invites a lot of friends. Now it’s dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each oth

2022-11-07 14:02:50 515

原创 HDU 6514 - Monitor(前缀和与差分)

Problem DescriptionXiaoteng has a large area of land for growing crops, and the land can be seen as a rectangle of n×mn×mn×m.But recently Xiaoteng found that his crops were often stolen by a group of people, so he decided to install some monitors to find

2022-11-03 17:38:17 292

原创 石子合并(区间DP)

题目描述设有 NNN 堆石子排成一排,其编号为 1,2,3,…,NNN。每堆石子有一定的质量,可以用一个整数来描述,现在要将这 NNN 堆石子合并成为一堆。每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。例如有 4 堆石子分别为 1 3 5 2, 我们可以先合并 1、2 堆,代价为 4,得到 4 5 2, 又合并 1,2 堆,代价为 9,得到 9 2 ,再合并得到 11,总代价为 4+9+11=24

2022-10-31 19:39:03 226

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除