自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法讲解089【必备】贪心经典题目专题1

将n个棍子合成一个,一定要n-1次,第一做了选择a+b=c,后面会累加n-2次c,所以每次选最小的两个合成?扔掉大的,留下小的,课程数量不变,后面空间增大。小根堆的大小就是当前开始位置的最大重合数。几个线段冲进来(也就是超过开始位置)?参数简单可以,参数复杂还是得靠逻辑。2.准备一个小根堆(存放结束位置)一个区间可能遇到怎样重合的区间?从左往右遍历,以某一个左端点为界。自然智慧,从简单的例子开始尝试。策略:依据拼接后的结果来排序。《=当前开始位置的都弹出。按结束时间排序,自然智慧。哦,之前的选择会累积加。

2025-06-13 15:49:30 432

原创 算法讲解040【必备】N皇后问题-重点是位运算的版本

本文介绍了两种解决N皇后问题的算法实现。第一种方法使用数组记录皇后位置,通过递归和冲突检查求解;第二种更高效的位运算方法,利用二进制位表示皇后位置限制,显著提升性能。测试结果显示,在14皇后问题时,位运算方法比数组方法快约100倍,且能在10秒内完成16皇后问题的求解,展示出位运算在解决约束满足问题上的优势。代码中还包含了两种方法的详细实现和性能对比测试。

2025-06-08 11:10:22 179

原创 算法讲解033【必备】位运算实现加减乘除

运算关键位操作等价逻辑加法a ^ b无进位和 + 进位减法加补码(负数)乘法循环左移并累加分解为 2 的幂次和除法右移比较并减去逆向乘法(试减)这些函数展示了如何用位运算模拟算术运算,适合面试或底层编程学习,但实际开发中应直接使用运算符。

2025-06-08 10:05:02 350

原创 算法讲解032【必备】位图

巧妙地reverse,每一块都要考虑reverse,面向对象的设计方法,利用变量来记录就不需要遍历查找了。是C++标准库中的一个模板类,用于处理固定大小的位序列。它提供了一种高效的方式来存储和操作二进制数据。bitset非常适合需要高效位操作的应用场景,如状态压缩、位掩码、集合运算等。

2025-06-07 11:27:00 395

原创 算法讲解031【必备】位运算的骚操作

right大于left,那么right-1一定存在,并且right-1遇上right一定会把最右边的一给消掉。利用某一个区间来表示这个区间所含有的一的数量,然后局部推导到整体,有点像递归呀。分治:部分逆序一直到整体逆序,利用递归来反向思考挺好。因为与运算中,只要有一个是0,就都是0了。把最左边1的后面全刷成1,然后加一。right小于等于left。

2025-06-07 10:17:44 248

原创 算法讲解030【必备】异或运算的骚操作(确实骚)

位运算确实是一个极其精妙的东西,计算机整个世界都有种精妙的逻辑感。

2025-06-07 09:05:56 175

原创 算法讲解042【必备】对数器打表找规律的技巧

1.没思路就写写暴力,打表找规律2.暴力:用最好理解,最正确的方式,枚举出所有可能性递归:思考清楚逻辑,当前的决策,终止条件循环嵌套:枚举啥?

2025-06-06 11:38:05 240

原创 算法讲解041【必备】最大公约数、同余原理

Stein算法是一种计算两个非负整数最大公约数(GCD)的高效方法,由德国数学家Josef Stein于1967年提出。它通过位运算和减法来优化传统的欧几里得算法,特别适合计算机实现。// 给定三个整数 n , a , b ,返回第 n 个神奇的数字。// 因为答案可能很大,所以返回答案 对 1000000007 取模。减,(a-b)%m=(a%m-b%m+m)%m=(a-b+m)%m。// 一个正整数如果能被 a 或 b 整除,那么它是神奇的。加和乘,直接每一步取模;

2025-06-06 10:44:22 683

原创 算法讲解005【入门】对数器-验证的重要手段

【代码】算法讲解005【入门】对数器-验证的重要手段。

2025-06-06 09:30:36 140

原创 算法讲解088【必备】动态规划专题总结与预告

背包动态规划(DP)是动态规划中的经典问题,其核心在于在有限容量的背包中选择物品以达到最优解(如最大价值、最小成本等)。​问题的动态规划方法,其核心思想是通过枚举区间的分割点,逐步求解更大区间的最优解。1.尝试,进行逻辑分析,分类讨论,观察规律,从简单到复杂,正难求反,利用答案的集合性质等等,观察数据量。​:在 DP 求解最优值后,通过反向追踪状态转移路径,还原具体方案(如选哪些物品、如何分割区间等)。在动态规划(DP)问题中,除了掌握各类问题的状态设计和转移方程外,​。

2025-06-05 10:58:12 1469

原创 算法讲解087【必备】动态规划中根据数据量猜解法的技巧

如果你当前的能力大于等于i号怪兽的能力,你可以选择直接通过,且能力不会下降。如果你当前的能力小于i号怪兽的能力,则必须付出b[]的钱贿赂这个怪兽。假设a[i]数值的范围不大,但是b[i]数值的范围很大,又该怎么做?开始时你的能力是0,你的目标是从1号怪兽开始,通过所有的n只怪兽。但你依然可以选择贿赂这个怪兽,然后怪兽的能力直接累加到你的能力上。假设a[]数值的范围很大,但是b[]数值的范围不大,该怎么做?然后怪兽就会加入你,他的能力a[]直接累加到你的能力上。希望做到集合A和集合B的累加和相差不超过1。

2025-06-05 10:06:32 840

原创 算法讲解086【必备】动态规划中得到具体决策方案的技巧

对于所需求的技能列表req_skills中列出的每项技能,团队中至少有一名成员已经掌握。编号为i的备选人员people[]含有一份该备选人员掌握的技能列表。一共有n个工具,每个工具都有自己的重量a、阻力b、提升的停留时间c。每个数字看作是单独的字符,比如120认为比36的字典序大。请你返回规模最小的必要团队,团队成员用人员编号表示。返回最久的停留时间和下标字典序最小的选择工具的方案。因为背包有限,所以只能背重量不超过m的工具。如果有多个答案,请输出其中字典序最小的。下标方案整体构成的字符串保证字典序最小。

2025-06-03 21:34:19 690

原创 算法讲解085【必备】数位dp-下

如果一个数字,存在长度至少为2的回文子串,那么这种数字被称为萌数。不含前导零且相邻两个数字之差至少为2的正整数被称为windy数。windy想知道[a,b]范围上总共有多少个windy数。比如101、110、111、1234321、45568。给定一个正整数n,请你统计在[0,n]范围的非负整数中。给定两个正整数a和b,求在[a,b]范围上的所有整数中。有多少个整数的二进制表示中不存在连续的1。太优美了,这个对于可能性的分析太妙了。求[,r]范围上,有多少个萌数。不含连续1的非负整数。

2025-06-02 21:19:48 253

原创 算法讲解084【必备】数位dp-上

1.灵活利用预处理结构2.记忆化搜索解决数位dp问题比较好3.边界条件要考虑清楚,不要空想,利用例子4.分类讨论,对于可能性的展开很重要5.逆向思维,集合的知识点灵活运用。

2025-05-30 18:15:14 665

原创 浅谈学习(费曼学习法)

6.实时调整,如果回看笔记时,发现自己压根看不懂了,说明自己的笔记做的有问题,要么是太过简洁,丢失了关键信息,要么是太过复杂,没有提炼成简洁易懂的方式。5.结合自己的生活,将笔记做的生动一点,有趣一点,画画图,(当然,是用画将知识点关联起来,不是乱涂乱画),编点记忆小口诀,整点小抽象。将学习过的东西用自己的方式记录下来,无论是文字,图表,顺口溜,歇后语,都可以,最关键就是一定要转换成自己的东西,自己去构建逻辑。7.我们的笔记是我们的付出,建立一种与自己的联系感,看着笔记一点点增多,至少会有点养成感。

2025-05-29 21:22:54 313

原创 算法讲解083【必备】动态规划中用观察优化枚举的技巧-下

1.就是你有好几份工作可以选择,一段时间内只能打一份工,从a点开始打工,到b点结束,获得c的报酬,结束后可以立刻开始新的工作。情况二: 选择当前工作,获得当前酬劳,并且在之前的工作里面找到一个结束时间早于当前工作开始时间的工作。2.对于一份工作,可以选择打,也可以选择不打,前面的工作打与不打会影响后面的工作是否可以被选择。观察发现,j为在一个单调递增数组的满足条件的最右下标,可以使用二分,省掉一点遍历的时间。观察严格动态规划的图,依赖的是前面的累加和,很显然可以利用变量维护窗口累加和。

2025-05-29 21:06:29 868

原创 1335:营救天使

然后就是对于bfs的理解了,bfs可以解决带权的路径的最优问题,要想深刻理解bfs,就要理解bfs的扩散感觉,它是一圈一圈扩散出去的,并且需要每一圈。地图上的每个位置都可以看作一个节点,有一个起点和一个终点,每个节点都有两个属性,一个属性是,从起点到这里所花的代价,另一个。所以任何可以初始化的东西都需要初始化,并且还要验证初始化成功没有,因为就像这道天使的题目,它题目是包含解救不出天使的情况的。所以要检查坐标,起点和终点的坐标究竟有没有被检测到,这个就是需要代码健壮性的思维了,所以严谨的思维是有用的。

2025-03-08 18:13:56 1058

原创 1133: Knight Moves

DFS 不适合解决最短路径问题,尤其是当路径长度较大时。你的代码慢在 DFS 的指数级时间复杂度、重复访问和无效路径回溯。强烈建议改用 BFS,这是解决此类问题的标准方法。int x,y;return 0;while(!i<8;记忆化剪枝挺有意思,保存状态,维持最优状态。

2025-03-05 21:55:44 715

原创 6943:数独游戏

我一开始的思想是部分正确的,搞清楚谁是主人公,谁是主人公的状态,题目条件无非就是限制主人公的状态变化,主人公的每次状态变化都会引起下一个主人的状态,所以当下一个主人公出现问题了,那就说明前面的主人公的状态不合理,于是需要回溯。在该函数内,就可以把nx,ny传进去,随机定位nx,ny为空白位置,如果找不到空白位置,说明全部地图已经被铺满了,如果找到了空白位置,那么就进行下一次递归,ai的思路很妙啊。//回溯法的核心思想就是在递归返回的时候,撤销当前的选择,回到之前的状态。输出9行,每行9个数字表示数独的解。

2025-03-05 21:34:07 627

原创 A*寻路笔记

在当前代码中起到的作用:map懂得如何给int等基本类型生成哈希值,但是不懂得如何给自定义函数生成哈希值,所以要自己写一个哈希函数来创建哈希值,也是一种映射吧。目的是将一个元素转化成一个具体的值,方便查找,就像给图书馆里面的书籍编号一样,这样就可以起码定位某一个书架了。一个命名空间,一个花括号,一个template,等会自己尝试写几个哈希函数才能检验自己知道了。也就是说一个节点不仅仅是一个节点,还可以给这个节点添加属性,记录一些东西。优先队列和sort是相反的,sort是同顺序,优先队列是逆顺序。

2025-03-05 21:20:52 686

原创 5809: 小猫爬山

这是顺序模式的,第一只猫猫确定一种状态之后,第二只猫猫就可以 选择一种状态了,第二只猫猫确定一种状态后,第三只猫猫就可以选择一种状态了,以此类推。这道题对于小猫有两种操作,一是放进任意的已有的小车里,二是新开一辆车,放进去。接下来N行每行一个整数,其中第i+1行的整数表示第i只小猫的重量Ci。对于100%的数据,1<=N<=18,1<=Ci<=W<=10^8。求最小值的题目,如果当前值已经大于当前的最小值了,那就没有必要记录了。求最大值的题目,如果当前值已经小于当前的最大值了,那也没有必要记录了。

2025-03-02 21:22:13 263

原创 6266: N皇后问题

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。1.犯蠢了,跟昨天一样的老毛病,自己都说的从1开始记索引,那么数组怎么也要开大点啊,怪不得只输出一次。共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。你的任务是,对于给定的N,求出有多少种合法的放置方法。4.对于多组数据的题目,要有重新初始化的意识。2.n其实当全局变量,不过都差不多。

2025-02-28 21:17:09 194

原创 5943: 八皇后问题

2.细节方面要注意,如果自己默认从1开始索引的话,输出空格时必须要设置不等于1时放空格。按给定顺序和格式输出所有八皇后问题的解(见样例,要求按照列优先的顺序输出各个解)。4.写了个check函数,二分也要写check函数,二分我还不太熟练欸。5.写的越来越流畅了,这才舒服嘛,之后还可以重新回来写一遍,太爽了。在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。3,有行优先和列优先,意思是一样的,其实就是把地图翻转了一下。1.创建数组时就要想到初始化。

2025-02-27 19:08:10 144

原创 5948: 排列型枚举

于是可以在同一个index放入更大的i,再次进行下一个程序,然后下一个程序又会从1到n,看哪里没有用过,所以需要上一个程序将自己用过的改为没用过。2.刚开始啥都没有输出,于是打印变量查看,最后发现是for循环的i初始化把1打成了i,所以当逻辑没有问题的时候,要注意看细节,哪里有可能打错。1.对于每一个节点来说,当后一个程序结束返回到当前程序时,下一个i永远是更大的。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。尽量把每一个变量都打印出来观察,一个范围,一个范围的查找问题所在。

2025-02-27 19:03:14 237

原创 5798: 组合型枚举

首先,同一行内的数升序排列,每个数字后面有一个空格。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 9 12排在1 3 10 11前面)。从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。2.每一个地方的细节都考虑清楚啊,if(index==n)注意这里是n还是m,记住每个变量的含义,并且弄清楚是哪里需要这个变量。3.m是所需数组长度,n是读取的数组长度,那么返回时肯定要的是所需数组长度。

2025-02-27 19:01:58 149

原创 6285: 2的幂次方表示

描述任何一个正整数都可以用2的幂次方表示。例如:137=27+23+20同时约定方次用括号来表示,即ab可表示为a(b)。由此可知,137可表示为:2(7)+2(3)+2(0)进一步:7=22+2+20(21用2表示)3=2+20所以最后137可表示为:2(2(2)+2+2(0))+2(2+2(0))+2(0)又如:1315=210+28+25+2+20所以1315最后可表示为:2(2(2+2(0))+2)+2(2(2+2(0)))+2(2(2)+2(0))+2+2(0)输入。

2025-02-27 11:00:19 552

原创 5759: 产生数

上面的整数234经过变换后可能产生出的整数为(包括原数)234,534,264,564共4种不同的产生数。4.每个程序都是一个节点,要考虑节点间的关系,这次节点是位置控制的,同一个位置要做不同的变换。求经过任意次的变换(0次或多次),能产生出多少个不同的整数。// 3.看了答案后思路还是不清晰,没有想清楚每一段程序的作用和每个变量的含义。后面有k行,每行两个数xi和yi,表示n中的数组xi可以变换成yi。给出一个整数n(n≤2000)和k个变换规则(k≤15)。② 规则中,右边的数字不能为零。

2025-02-27 10:37:47 253

原创 3104: 自然数的拆分

自然数的拆分:任何一个大于1的自然数N,总可以拆分为若干个自然数之和,并且有多种拆分方法。请设计一个对任意自然数,找出所有拆分方法的程序。每行输出顺序规则看上面例子可以观察出来吧(自己琢磨下吧o(∩_∩)o )。每行输入一个正整数n,2<=n<=35。为简单起见,每行数据之间没有空格,行末也没空格。5=1+4 ( 5=4+1看成同一种拆分)1.上一个,当前,下一个,这个思维很重要。2.利用好全局变量,但是要重新初始化。3.在草稿纸上列出的关键信息忘记了。6.输出关键变量来理解程序。

2025-02-25 18:57:34 259

原创 线性表操作

(3)插入:Insert pos x, 表示将x插入到pos位置前(位置下标0开始),如果pos下标不在顺序表范围,不执行该操作;(4)删除:Delete pos, 表示删除pos位置的元素(位置下标0开始),如果pos下标不在顺序表范围,不执行该操作;else if(strcmp(cmd, "Insert")==0)//位置前插入元素。else if(strcmp(cmd, "FindElem")==0)//查找。else if(strcmp(cmd, "Reverse")==0)//逆置。

2025-02-21 22:23:38 576

原创 数据结构练习题----队列的基本操作

描述请你定义一个队列,可以对队列进行“入队”、“出队”、“队列输出”等操作。键盘输入一些命令,可以执行上述操作。本题中,队列中元素均为整数。队列的最大元素个数为1000。输入输入各个命令,它们对应的格式如下:入队:enq x,x代表入队的元素,这里enq和元素之间用空格分隔。队列输出:printq出队:deq当输入的命令为exit时,程序结束。输出当输入的命令为deq时,请输出出队列的元素值。当输入的命令是printq时,请输出队列中所有元素的值。

2025-02-20 16:06:42 221

原创 3023: List the Books

描述输入输出样例输入3Year4Price0样例输出。

2025-02-20 11:37:20 842

原创 8135: 项链

小码哥最近获得了 n 颗珍珠,第 i 颗珍珠拥有一个美观值ai。他现在想把这 n 颗珍珠以任意顺序排列后串成一串项链,定义一个项链的美观值为相邻珍珠的美观值之差的绝对值之和,即。没有注意数据大小,这种累加,累乘的数据很有可能超出int,要用long long ,平时多用long long。其中 ai 为重新排列后的项链上的第 i 颗珍珠的美观值,由于项链是一个环,我们这里定义 an+1=a1。第二行 n 个整数 a1,a2,⋯,an (1≤ai≤109),ai 表示第 i 颗珍珠的美观值。

2025-02-20 10:55:24 321

原创 8132: 冰雪大冒险

接下来输入 k 行,每行输入两个数字 ai,bi,表示第 i 个障碍物的位置在第 ai 行,第 bi 列。接下来输入 k 行,每行输入两个数字 ai,bi,表示第 i 个障碍物的位置在第 ai 行,第 bi 列。现在给出地图中所有障碍物的位置,小码哥的初始位置和小码哥的操作序列,请你求出小码哥最终停留的位置。现在给出地图中所有障碍物的位置,小码哥的初始位置和小码哥的操作序列,请你求出小码哥最终停留的位置。第二行输入两个整数x,y (1≤x≤n,1≤y≤m),表示小码哥初始在第 x 行第 y 列。

2025-02-20 10:34:29 384

原创 1502: Find All M^N Please

2.终止条件搞错了,这里是随便设置m的大小(必须要足够大),然后通过m的n次方来终止循环。1.用long long而不是int,int不可以吗?int在计算时会出现一个漏洞,

2025-02-19 17:27:58 119

原创 8134:数字统计

我们定义一个正整数的逆为将这个数的倒过来写的数,即原来这个数字的低位变成高位、高位变成了低位。若这个数恰好为这个数的逆的倍数,则我们称这个数是”神奇的”,如正整数 87912 就是神奇的,因为87912=4×21978,而 21978 恰好为 87912 的逆。那么有没有什么改进点呢?对于样例,小于等于 30 的正整数中,1,2,3,4,5,6,7,8,9,10,11,20,22,30 是神奇的。3.写博客的目的是为了提升自己的思维水平,我应该彻底弄懂消化这些内容,借助输出来理顺自己的思路,同时强化记忆。

2025-02-18 18:57:36 223

原创 度过一个寒假,大家有什么想法嘛?

虽然家族间免不了矛盾,勾心斗角,但是有有着真情,真真假假,谁又分得清,奶奶这么幸苦,也是奶奶的因果,我不可能改变任何人的想法,我只能强大自己,充盈自己的能量,进而影响他人罢了,或许事情的转机在我,但是我也不会将振兴家庭的责任抗在我的肩上,我也很辛苦,很可怜,从小到大一直在治愈自己内心的伤,好在逐渐认识到了自己,认识到了家人,认识到了一些道理,看懂了一些社会,了解了一点世界,人在时代面前,在大环境面前,是无比渺小的,曾经的我极度自卑,又极度自大,希望能够越来越中和,自信。

2025-02-16 11:38:07 302

原创 1001:产生冠军

很显然,状态一中,A肯定是冠军,状态二中找不到冠军,因为相生相克,成环了,再深入一点观察,我们可以发现,状态一的A和状态二的A只有一点点不同,那就是指出去的箭头数量,那么,又延伸出了一个概念,入度和出度,入度:指向当前节点的箭头数量,出度:当前节点发射出去的箭头数量,回到上面的问题,那么如何判断是否已经实际上产生冠军了呢?1.首先理解题目的意思,就是一堆人打比赛,两两之间只能够对战一次,比如A和B和C三个人打比赛,无非A和B打,A和C打,B和C打,不能再B和A打,也就是三选二,数学中的组合。

2025-02-14 15:15:13 614

原创 8133:房间打扫

每个格子的初始状态要么是干净的,要么是脏的。3.思路出来了,我们要模拟过程,假设要将第一行变干净,我们需要记录下来哪一列需要被翻转,然后遍历每一行的每一个数字,如果是1,检查其是否属于要被翻转的那一列,那么这一行肯定不会是干净的,判断干净需要一行的每个位置都是干净的,判断脏的只需要找到一个反例。2.聚焦问题,最大的干净的行数,首先去思考,需要怎样才能把一行给变干净,也就是把这一行中有0的那一列翻转,翻转了会影响其他行,我们自然会想到遍历每一行,看看干净的行数是变多了还是变少了。然后接下来输入 n 行。

2025-02-04 14:56:10 447

空空如也

空空如也

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

TA关注的人

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