![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法学习记录
文章平均质量分 63
captain_dong
编程初学者-小白
展开
-
1113. 红与黑--Flood Fill 算法
1113. 红与黑--Flood Fill 算法有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。原创 2024-04-12 20:42:13 · 544 阅读 · 0 评论 -
1233. 全球变暖---BFS
1233. 全球变暖---BFS其中”上下左右”四个方向上连在一起的一片陆地组成一座岛屿,例如上图就有 22 座岛屿。由于全球变暖导致了海面上升,科学家预测未来几十年,岛屿边缘一个像素的范围会被海水淹没。请你计算:依照科学家的预测,照片中有多少岛屿会被完全淹没。原创 2024-04-12 19:01:54 · 963 阅读 · 0 评论 -
1101. 献给阿尔吉侬的花束--BFS
阿尔吉侬是一只聪明又慵懒的小白鼠,它最擅长的就是走各种各样的迷宫。今天它要挑战一个非常大的迷宫,研究员们为了鼓励阿尔吉侬尽快到达终点,就在终点放了一块阿尔吉侬最喜欢的奶酪。现在研究员们想知道,如果阿尔吉侬足够聪明,它最少需要多少时间就能吃到奶酪。迷宫用一个 R×C 的字符矩阵来表示。字符 S 表示阿尔吉侬所在的位置,字符 E 表示奶酪所在的位置,字符 # 表示墙壁,字符 . 表示可以通行。阿尔吉侬在 1 个单位时间内可以从当前的位置走到它上下左右四个方向上的任意一个位置,但不能走出地图边界。原创 2024-04-12 16:58:38 · 479 阅读 · 0 评论 -
算法笔记---DFS--背包装入的最大价值问题P273
由于缺乏剪枝,算法在处理具有大量可行解的问题实例时,尤其是当物品数量较大或背包容量相对较小时,会面临非常大的搜索空间。在这种情况下,算法的时间复杂度可能是指数级别的,即随着物品数量的增长,所需计算时间呈爆炸性增长,导致算法在实际应用中可能无法在合理时间内找到解。这导致了大量的无用搜索,即探索了许多不可能构成有效解的状态(即总重量超过背包容量的物品组合),浪费了计算资源。这样,对于那些会导致总重量超限的选择,程序会提前终止这部分递归路径,避免了不必要的计算,大大减少了无用搜索空间。原创 2024-04-10 21:24:36 · 352 阅读 · 0 评论 -
99. 激光炸弹
地图上有 NN 个目标点,用整数 Xi,YiXi,Yi 表示目标在地图上的位置,每个目标都有一个价值 WiWi。:不同目标可能在同一位置。现在有一种新型的激光炸弹,可以摧毁一个包含 R×RR×R 个位置的正方形内的所有目标。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆炸范围,即那个正方形的边必须和 x,yx,y 轴平行。求一颗炸弹最多能炸掉地图上总价值为多少的目标。原创 2024-04-09 23:46:05 · 114 阅读 · 0 评论 -
730. 机器人跳跃问题-----1221. 四平方和----二分
如果 H(k+1)>EH(k+1)>E,那么机器人就失去 H(k+1)−EH(k+1)−E 的能量值,否则它将得到 E−H(k+1)E−H(k+1) 的能量值。因此,b 从 a 开始循环,c 从 b 开始循环,是为了确保找到的解是按照从小到大排列的,同时避免了重复计算相同的组合。,H(N)H(1),H(2),…编号为 00 的建筑高度为 00 个单位,编号为 ii 的建筑高度为 H(i)H(i) 个单位。假设机器人在第 kk 个建筑,且它现在的能量值是 EE,下一步它将跳到第 k+1k+1 个建筑。原创 2024-04-05 12:14:47 · 868 阅读 · 0 评论 -
790. 数的三次方根---实数二分
共一行,包含一个浮点数,表示问题的解。给定一个浮点数 n,求它的三次方根。此题:求三次方根函数 有单调性。注意,结果保留 66 位小数。共一行,包含一个浮点数 n。原创 2024-04-02 21:37:28 · 331 阅读 · 0 评论 -
789. 数的范围---整数二分法
第二行包含 nn 个整数(均在 1∼100001∼10000 范围内),表示完整数组。对于每个查询,返回一个元素 kk 的起始位置和终止位置(位置从 00 开始计数)。给定一个按照升序排列的长度为 nn 的整数数组,以及 qq 个查询。共 qq 行,每行包含两个整数,表示所求元素的起始位置和终止位置。接下来 qq 行,每行包含一个整数 kk,表示一个询问元素。第一行包含整数 nn 和 qq,表示数组长度和询问个数。如果数组中不存在该元素,则返回。如果数组中不存在该元素,则返回。原创 2024-04-02 21:11:02 · 318 阅读 · 0 评论 -
116. 飞行员兄弟--枚举-位运算
飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有 1616 个把手的冰箱。已知每个把手可以处于以下两种状态之一:打开或关闭。只有当所有把手都打开时,冰箱才会打开。把手可以表示为一个 4×44×4 的矩阵,您可以改变任何一个位置 [i,j][i,j] 上把手的状态。但是,这也会使得第 ii 行和第 jj 列上的所有把手的状态也随着改变。请你求出打开冰箱所需的切换把手的次数最小值是多少。原创 2024-03-31 15:59:41 · 562 阅读 · 0 评论 -
1208. 翻硬币--递推
小明正在玩一个“翻硬币”的游戏。桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?我们约定:把翻动相邻的两个硬币叫做一步操作。原创 2024-03-30 11:48:42 · 134 阅读 · 0 评论 -
717. 简单斐波那契
在一行中输出斐波那契数列的前 NN 项,数字之间用空格隔开。这个数列从第 33 项开始,每一项都等于前两项之和。输入一个整数 NN,请你输出这个序列的前 NN 项。被称为斐波纳契数列。原创 2024-03-30 01:11:05 · 165 阅读 · 0 评论 -
1556. 月饼--贪心
月饼是中国的一种烘焙食品,是在中秋节期间食用的传统美食。月饼的种类多种多样,不同的月饼可能会有不同的表皮和馅料。现在,考虑到各种月饼的库存量和价格,以及市场对月饼的总需求量,请你计算出可以赚到的最大利润。原创 2024-03-29 21:43:08 · 360 阅读 · 0 评论 -
暴力解决:1209. 带分数
100100 可以表示为带分数的形式:100=3+69258714100=3+69258714还可以表示为:100=82+3546197100=82+3546197注意特征:带分数中,数字 1∼91∼9 分别出现且只出现一次(不包含 00)。类似这样的带分数,100100 有 1111 种表示法。原创 2024-03-28 12:40:47 · 250 阅读 · 0 评论 -
93. 递归实现组合型枚举
通过这个递归过程,程序实际上在不断地深入搜索所有可能的组合方案,每次选择一个数字后继续向下一个位置探索,直到选择了 m 个数字后输出结果并返回上一层递归,再继续尝试其他可能的选择。通过剪枝操作,可以减少不必要的搜索过程,尤其在组合问题中,可以有效地减少重复计算和无效搜索,从而加快程序的执行速度。这是为了确保在不同的路径中,不会出现相同的数字被重复选择。添加了一个剪枝操作,即在进入递归前判断如果当前位置 u 加上剩余可选数字的范围(n - start)小于需要选择的数字个数 m,则直接返回,不再继续递归。原创 2024-03-28 00:32:20 · 666 阅读 · 0 评论 -
94. 递归实现排列型枚举
把 1∼n1∼n 这 nn 个整数排成一行后随机打乱顺序,输出所有可能的次序。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。按照从小到大的顺序输出所有方案,每行 11 个。首先,同一行相邻两个数用一个空格隔开。原创 2024-03-23 01:30:21 · 348 阅读 · 0 评论 -
92. 递归实现指数型枚举
在 dfs 函数中,首先判断是否已经到了最后一位,如果是,则将当前选取的数字存入 way 中,并将 way 存入 ways 中,表示找到了一种选择方案。首先,在全局定义了一个常量 N 表示最大的整数个数,定义了一个数组 st 用来记录每个位置当前的状态:0 表示还没考虑,1 表示选它,2 表示不选它。这段代码是一个经典的递归实现,用于从 1 到 n 这 n 个整数中随机选取任意多个,然后输出所有可能的选择方案。从 1∼n1∼n 这 nn 个整数中随机选取任意多个,输出所有可能的选择方案。原创 2024-03-23 00:51:31 · 864 阅读 · 0 评论 -
795. 前缀和
输入一个长度为 nn 的整数序列。接下来再输入 mm 个询问,每个询问输入一对 l,rl,r。对于每个询问,输出原序列中从第 ll 个数到第 rr 个数的和。原创 2024-03-06 15:59:18 · 166 阅读 · 0 评论 -
Codeup5901-算法笔记顺序P95
时间限制: 1 Sec 内存限制: 128 MB读入一串字符,判断是否是回文串。“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。一行字符串,长度不超过255。如果是回文串,输出“YES”,否则输出“NO”。12321YES解题注意事项:水题,注意边界就好.原创 2024-03-04 17:27:36 · 177 阅读 · 0 评论 -
进制转换 【PAT B1022】D进制的A+B
整数A和B(原创 2024-03-04 17:10:20 · 412 阅读 · 0 评论 -
【Codeup】1928: 日期差值
代码中的if 语句 if(d1==month[m1][isLeap(y1)]+1) 中的 +1 是为了判断日期是否达到了当前月份的最后一天。有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天。直接的做法时让日期不断+1,直到第一个日期等于第二个日期为止,即可统计答案。有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD。每组数据输出一行,即日期差值。原创 2024-03-04 16:07:46 · 221 阅读 · 0 评论 -
【PAT B1036】跟奥巴马一起学编程
美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输出由给定字符C画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的50%(四舍五入取整)。输入在一行中给出正方形边长N(3原创 2024-03-04 15:14:32 · 240 阅读 · 0 评论 -
【codeup 1034】找x
输入一个数n(1原创 2024-03-04 14:45:33 · 242 阅读 · 0 评论 -
PAT-B 1032. 挖掘机技术哪家强
输入在第1行给出不超过10^5的正整数N,即参赛人数。随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。1.输入一个数字,对应下面出现的n个分组,分组中包含学校的id和获得的总分。现请你根据比赛结果统计出技术最强的那个学校。2.遍历中输入n个对应的id和分数,并计算出每一个id中的总分;在一行中给出总得分最高的学校的编号、及其总分,中间以空格分隔。题目保证答案唯一,没有并列。3.再遍历一次找出最大的总分和对应的ID。原创 2024-03-03 22:22:56 · 305 阅读 · 0 评论 -
PAT_B1001 | 害死人不偿命的(3n + 1)猜想
对任何一个正整数 n,如果它是偶数,那么把它砍掉一半;如果它是奇数,那么把 (3n+1) 砍掉一半。卡拉兹在 1950 年的世界数学家大会上公布了这个猜想,传说当时耶鲁大学师生齐动员,拼命想证明这个貌似很傻很天真的命题,结果闹得学生们无心学业,一心只证 (3n+1),以至于有人说这是一个阴谋,卡拉兹是在蓄意延缓美国数学界教学与科研的进展……我们今天的题目不是证明卡拉兹猜想,而是对给定的任一不超过 1000 的正整数 n,简单地数一下,需要多少步(砍几下)才能得到 n=1?原创 2024-03-03 22:06:45 · 121 阅读 · 0 评论 -
3560. 阶乘
给定一个整数 n,计算并输出 n 的阶乘。第一行包含整数 m,表示共有 m 组数据。每组数据占一行,包含一个整数 n。每组数据输出一行,一个结果。注意:long long型。原创 2024-03-02 18:06:53 · 282 阅读 · 0 评论 -
洛谷---P1824 进击的奶牛---二分法的运用
Farmer John 建造了一个有 NN(2 \leq N \leq 10 ^ 52≤N≤105) 个隔间的牛棚,这些隔间分布在一条直线上,坐标是 x _ 1, x _ 2, \cdots, x _ Nx1,x2,⋯,xN(0 \leq x _ i \leq 10 ^ 90≤xi≤109)。他的 CC(2 \leq C \leq N2≤C≤N)头牛不满于隔间的位置分布,它们为牛棚里其他的牛的存在而愤怒。原创 2024-02-27 19:22:15 · 228 阅读 · 0 评论 -
785. 快速排序 、787. 归并排序
给定你一个长度为 nn 的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。原创 2024-02-26 16:21:50 · 331 阅读 · 0 评论 -
定义一个二维数组并输入数据,将二维数组元素的值按升序排列,并输出排序后的二维数组。
定义一个二维数组并输入数据,将二维数组元素的值按升序排列,并输出排序后的二维数组。原创 2023-12-24 20:14:40 · 2056 阅读 · 1 评论 -
C++动态规划------ 0-1背包问题--最长单调递增子序列
(其中 j ∈ [0, i-1],a[j] < a[i]),表示考虑以第 j 个元素为结尾的最长递增子序列长度加上第 i 个元素后能够构成的最长递增子序列长度。时间复杂度为 O(n^2)。首先输入 n、W 和每个物品的重量和价值,然后初始化 dp 数组为 0,表示载重量为 0 时,能够获得的最大价值为 0。(其中 j ∈ [w[i], W]),表示考虑选择第 i 个物品和不选择第 i 个物品两种方案,取价值最大的那一个。接着使用两层循环,枚举以第 i 个元素为结尾的最长递增子序列的长度,状态转移方程为。原创 2023-05-04 20:35:35 · 297 阅读 · 0 评论 -
C++动态规划------最大子段和的问题
【代码】C++动态规划------最大子段和的问题。原创 2023-05-04 20:18:08 · 2344 阅读 · 0 评论 -
C+++分治算法------ 整数因子分解
当n=12时,整数因子分解的递归过程这段代码实现了计算给定正整数n的不同质因数分解式个数的功能,基于递归方法实现。其原理是枚举n的所有因子并进行递归调用,直到达到质数为止。具体而言,for循环从2开始枚举n的因子i,如果i是n的因子,则将n/i作为新的待分解数,继续递归调用solve函数;否则增加i的值,继续枚举。当n=1时,表明分解结束,此时total加1,表示得到了一种不同的质因数分解式。当n是质数时,总的分解式个数为1。原创 2023-05-03 16:10:34 · 1558 阅读 · 0 评论 -
C++分治算法------士兵站队问题----邮局选址问题
在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点由整数坐标(x,y)表示。士兵们可以沿网格边上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。如何选择x 和y的值才能使士兵们以最少的总移动步数排成一列。算法设计:计算使所有士兵排成一行需要的最少移动步数。【输入形式】输入数据:第1 行是士兵数n,1原创 2023-05-03 15:00:33 · 2163 阅读 · 0 评论 -
C++:分治算法之选择问题的选择第k小元素问题
具体来说,对于选择第 k 小元素的问题,可以利用分治算法的思想将数组按照主元划分为两个部分,并根据主元在数组中的位置关系,决定继续处理数组的哪一部分。可以使用递归的方式实现分治算法解决选择问题中的选择第 k 小元素问题。快速选择算法的基本思路是选取数组中的一个主元,将数组划分为两个部分,并根据主元在数组中的位置关系,决定继续处理数组的哪一部分。分治算法是一种将问题分成若干个子问题处理的思想,通过将原问题分解为多个规模较小的子问题并逐个解决,最终将子问题的解组合起来得到原问题的解。原创 2023-05-03 09:58:36 · 5071 阅读 · 2 评论 -
图的搜索算法---8.2 ZOJ1002-Fire Net--合理布置碉堡
输入样例输出样例4.X......XX......5 (2)判断每个单元格能否放置碉堡行 / 列012300123145672891011312131415原因:正确代码:示例1- 示例2-- 【针对错误修改后的】运行结果:1-- 2---原创 2023-04-20 08:29:09 · 247 阅读 · 0 评论 -
C++回溯算法---图的m着色问题01
图的m着色问题是指给定一个图以及m种不同的颜色,尝试将每个节点涂上其中一种颜色,使得相邻的节点颜色不相同。这个问题可以转化为在解空间树中寻找可行解的问题,其中每个分支结点都有m个儿子结点,最底层有m的n次方个叶子结点。算法的思路是在解空间树中做。C++回溯算法---图的m着色问题。,并使用约束条件来剪枝优化搜索。原创 2023-04-13 23:21:51 · 4658 阅读 · 0 评论 -
回溯算法--01背包问题
回溯算法是一种解决问题的通用算法,能够在一个问题的所有解空间中,按深度优先的策略搜索,直到找到所需要的解或者搜索完整个解空间都没有找到解。0-1背包问题是指在限制背包容量的情况下,在一堆物品中选择一部分,使得这些物品的总价值最大。C++ 设计回溯算法解决0-1 背包问题的思路。原创 2023-04-06 08:15:05 · 14865 阅读 · 7 评论 -
贪心算法-删数问题C++
有一个长度为n(n原创 2023-03-30 08:34:18 · 6594 阅读 · 0 评论 -
0-1背包模板
01背包问题是一种典型的动态规划问题,假设你现在要放第i件物品,它可以放也可以不放。如果放了,那么前i-1件物品就不能再放了,因为01背包只有一个容量为m的背包。如果不放,那么前i-1件物品还是可以放的。// w[i]表示第i件物品的重量,v[i]表示第i件物品的价值int f[N];其中f[j]表示前i件物品放入容量为j的背包中所能获得的最大价值。// f[i]表示前i件物品放入容量为m的背包中所能获得的最大价值。原创 2023-03-29 19:59:36 · 373 阅读 · 0 评论 -
C++实现输入四个随机数字,输出不重复的4位数的程序
【代码】C++实现输入四个随机数字,输出不重复的4位数的程序。原创 2023-03-26 22:02:01 · 2108 阅读 · 1 评论 -
矩阵连乘积问题--动态规划
给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2,…n-1。考察这n个矩阵的连乘积A1A2…An。原创 2023-03-16 09:36:16 · 2007 阅读 · 0 评论