自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++记忆化搜索详解

具体实现时,可以根据问题的特点设计合适的数据结构和逻辑,将已计算过的结果保存起来,以便后续的计算中进行查找和复用。在传统的递归解法中,当函数需要多次调用自身时,可能会出现重复计算相同的子问题。这种情况下,记忆化搜索通过保存已计算过的结果,避免重复计算,从而提高程序的执行效率。在这段代码中,我们定义了一个全局数组f来进行记忆化搜索,在递归函数fib中如果第i项的值已经被计算过了就直接调用,可以大大提高代码的运行速度。C++中的记忆化搜索(Memoization)是一种优化技术,用于减少重复计算的开销。

2023-08-08 11:02:44 610 1

原创 C++之STL(容器超详解万字长文)

C++ STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了丰富的通用数据结构和算法。STL旨在提供高效、可复用和可移植的编程工具,帮助开发人员更轻松地实现各种应用。STL包含以下几种主要组件:容器(Containers):STL提供了多种容器类型,如向量(vector)、链表(list)、栈(stack)、队列(queue)、集合(set)和映射(map)等。这些容器提供不同的数据存储方式和操作方法,使其适用于各种场景。

2023-08-07 11:19:21 297

原创 C++并查集详解

合并操作将两个集合合并为一个集合,即将一个集合的根节点的父节点指向另一个集合的根节点。这可以通过查找两个元素所属集合的根节点,并将其中一个的根节点的父节点指向另一个根节点来实现。可以把这个过程想象成在一群人里选择一部分,让他们都有一个代表人物,两群人合并的时候就让第二群人的代表人物也变成第一群人的代表人物,查找的时候只需要看两个点的代表人物是否相同。初始时,每个元素的父节点都指向自身。在并查集中,每个元素都有一个父节点指向它所属的集合的根节点。如果某个元素的父节点指向自身,则表示该元素为集合的根节点。

2023-08-07 08:42:49 212 1

原创 [USACO09NOV] Lights G

牛棚里一共有 N 盏灯,电灯间有 M 条电线,其中第 i 条电线连接了第 A i 和 B i 盏灯,A i ̸= B i ,也不会有多条电线重复连接同一组灯。不仅如此,由于电线的作用,按下某盏灯的开关后,和这盏灯直接相连的其他电 灯也会随之改变状态。考虑用2进制表示每一种状态,第一盏灯为2>>1,第二盏灯为2>>2,第i盏灯为2>>i,这样我们可以表示出任何一种状态,用map储存每一种状态,当搜索到一种状态使得他和之前的某一种状态相加=灯全部亮的状态,就输出两者的步数和。单个整数:表示最少按下的开关次数。

2023-10-02 20:42:44 110 1

原创 [USACO13Jan] Liars and Truth Tellers B

黄题。

2023-10-02 20:19:13 96 1

原创 递推与递归

因此,在使用递归算法时,需要合理地选择递归的深度和递归调用的位置,以避免潜在的问题。总结来说,递归是一种常用的编程技巧,通过函数在自身内部调用自身,可以解决需要重复执行相同或类似操作的问题。Pell数列a_1,a_2,a_3, ...的定义是这样的,a_1 = 1, a_2 = 2, ... , a_n = 2 a_{n−1} + a_{n-2}(n>2)。通过定义初始条件a=0、b=1,然后使用for循环从第3项开始计算,每次迭代计算出当前项的值temp,并更新a和b的值。当b等于1时,则直接写成a。

2023-08-07 11:52:02 107

原创 sort详解

C++的sort函数是用于对容器中的元素进行排序的标准库函数。它属于算法头文件,可以用来对各种容器(如数组、向量、列表等)进行排序操作。sort其中,RandomIt是一个表示随机访问迭代器的类型参数,first和last分别表示待排序序列的起始和结束位置的迭代器。sort函数使用默认的升序排序规则对指定范围内的元素进行排序。排序范围是左闭右开区间,即包含起始位置的元素,但不包含结束位置的元素。以下是sort。

2023-08-06 16:28:11 55

原创 DP中的状态和转移

在斐波那契数列问题中,可以定义状态dp[i]表示第i个斐波那契数。

2023-08-06 16:16:04 197

原创 DP进阶用法

背包问题是动态规划中经典的问题之一,有多种变种形式。除了01背包问题(每个物品要么选取要么不选取),还有完全背包问题(每个物品可以重复选取)、多重背包问题(每个物品选取次数有限制)等,在上一篇文章中我做过讲解。这些背包问题的解决方案通常在状态转移方程上有所不同。,其中w[i]和v[i]分别表示第i个物品的重量和价值。在变种问题中,我们需要考虑v和w分别代表什么,还需要考虑初始条件、状态及转移方程。

2023-08-06 16:08:01 50

原创 DP背包问题详解

定义状态dp[i][j]表示前i个物品放入容量为j的背包中所能获得的最大价值。

2023-08-06 15:53:27 213

原创 DP——入门

动态规划通过将大问题分解为小问题,并利用已经求解过的子问题的解来构建整体解决方案。定义状态:确定问题的状态以及状态的表示方法。确定状态转移方程:根据问题的最优子结构性质,定义状态之间的转移关系。初始化边界条件:给定初始状态的值,用于计算后续状态。进行状态转移:使用状态转移方程逐步计算出问题的最优解。返回结果:返回最终的问题解。定义问题的状态,确定状态的表示方法。例如,对于背包问题,可以定义dp[i][j]表示前i个物品放入容量为j的背包中所能获得的最大价值。

2023-08-06 13:26:28 367

原创 C++纯新手教程

C++是一种通用的高级编程语言,广泛用于开发各种应用程序。它继承了C语言的特性,而与C语言不同的是,C++这门语言添加了面向对象编程的功能。本章会带领新手入门C++编程,并逐步学习基本概念和语法。

2023-08-06 13:05:39 42

原创 【拓扑排序】848. 有向图的拓扑序列

题目中有一个要求:输出字典序最小,前向星存储的弊端就显而易见了,前向星没办法对答案进行排序,所以需要用优先队列(小根堆),请输出任意一个该有向图的拓扑序列,如果拓扑序列不存在,则输出。这道题看似很简单,先用前向星存储一波,然后BFS解决,直接输出。共一行,如果存在拓扑序列,则输出字典序最小的拓扑序列即可。若一个由图中所有点构成的序列。条边的有向图,点的编号是。,图中可能存在重边和自环。满足:对于图中的每条边。是该图的一个拓扑序列。行,每行包含两个整数。

2023-08-06 11:22:19 167

空空如也

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

TA关注的人

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