- 博客(21)
- 收藏
- 关注
原创 蓝桥杯 Day20 整数二分
应用场景:存在一个有序数列,能将数目建模在有序数列上查找一个合适的数值。参考:二分算法的详细介绍(附蓝桥杯和力扣题目详解)_ml-citation{ref="5,7" data="citationlist"}-优快云博客。
2025-03-14 13:09:41
667
原创 蓝桥杯 Day18 背包问题
解题思路:先把a[ ]从小到达排序,如果较大的数可以被较小的数表示出来,那么货币系统中就可以去掉这个数。用完全背包的思想来求解。解题思路:典型的多重背包。采用多重背包的二进制优化来解题,注意物品的数目增加,空需要更大空间。
2025-03-09 20:52:06
215
原创 蓝桥杯 Day15 动态规划 背包问题
注意:如果从小到大遍历 j,那么在更新 dp[j][k] 时, dp[j-1][k-i] 可能已经被更新过,导致重复计算。对应的方案数为 dp[i-j][j-1]。因此,总方案数为两种情况的叠加:dp[i][j] = dp[i−j][j] (不包含1) + dp[i−j][j−1] (包含1)。此时的方案数应该为两种情况之和,即dp[i][j][k] = dp[i-1][j-1][k-i] + dp[i-1][j][k]从1~i中取 j-1个数,再取i,等价于 dp[i-1][j-1][k-i]
2025-03-05 19:28:12
1353
原创 蓝桥杯 Day14 动态规划
如果我们忽略最后一个条件 :向左下走的次数与向右下走的次数相差不能超过1。现在来求解这个问题。我们将题目中的等腰三角形转换为直角三角形,然后用一个二维数组a[][]来存储。动态规划(自顶向下)题目中的向左下走就变成了向下走。如果我们,对于位置(i,j),我们有两种到达方法:(1)从(i-1,j)向下走一步(2)从(i-1,j-1)向右下走一步。我们定义一个数组 dp[ ][ ],dp[i][j] 表示从(1,1)走到(i,j)的所有路径和中的最大值。
2025-03-04 12:46:10
1412
原创 蓝桥杯 Day12 字符串分析
我们每次只计算最靠左的字符对答案的贡献。则一个字符能产生贡献的区间为 [字符上一次出现的位置+1~末尾]。用一个last[]数组来记录第i个字符上一次出现的位置,当这个字符再次出现时,更新last[]。在限制了左右区间的取值范围之后,能构造出的子串数目为 左端点的取值范围×右端点的取值范围,即(i - last[ ]) * (n-i+1),下标从1开始。答案等于所有字符产生的贡献。解题思路:非常简单,用一个数组把字符串中每个字母出现的次数记录下来,再找出出现系数最多、字典序最小的就行了。
2025-03-02 15:56:34
270
原创 蓝桥杯 Day11 简单数论
则计算出 d 的值之后就能求出 n 的值。d 越大,n就越小。我们记录每一项与 a1 的差值,这个差值必定是 d 的倍数,取所有差值的最大公约数,就是 d 的最大取值。因此我们只需要对1~100中每个数做质因数分解,统计每个质因子的幂次,在对应相加就能得到100!的每个质因子的幂次。:正常情况下是先计算出 n!的大小,再枚举 1~根号n 中的数,找出并统计n的因子及因子个数,但是时间肯定不够。唯一分解定理:每个大于1的自然数都可以分解为若干质数的乘积。约数定理:n的正约数的个数为。表示n的第i个质因子,
2025-03-01 17:00:19
406
原创 蓝桥杯 Day10 迷宫问题
使用一个数组G[ ][ ]记录障碍的地方,再使用一个vis[ ][ ]来标记自己所走过的路;使用自动选择方向dir[ ][ ]来代替4个if判断(使代码更加简洁);:DFS 可能会多次访问同一位置,尤其在复杂迷宫中效率较低。通常BFS 更适合求解最短路径问题,因为它天然按层(步数)遍历,首次到达终点时即为最短路径。如果 当前区域合法 && 没有障碍 && 没有走过,就进一步搜索,把自己走过的路打上标记,返回时,再将标记还原。由于上述原因,我们使用BFS进行求解。这道题与上一个不同,问的是。
2025-02-28 22:00:49
283
原创 回溯法(子集树和排列树)
1、回溯法概念(DFS)回溯算法实际上是一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束;
2025-02-28 18:32:47
604
原创 蓝桥杯 Day8 贪心
第二组n个字符依次为a21,a22,a23。第K组n个字符依次为ak1,ak2,ak3……第一组n个字符依次为a11,a12,a13。想要使修改的次数最少,我们就要把上述每行中所有元素修改为该行出现次数最多的字符……假设经过最少修改次数后,S变成S1,S1由字符串T重复K次得到。字符串T中字符个数设为n (n=S/K), a11=a21=a31=从左到右依次判断每个硬币的状态是否与目标状态相同,如果不同,就对其进翻面操作。
2025-02-25 22:32:53
223
原创 蓝桥杯 Day6 搜索|查找
dfs函数中,cnt 参数表示当前边的编号,id 参数表示当前路径的编号。反证法证明:假设一个小朋友属于多个环,那每个环中必定都存在一个其崇拜对象,与题意矛盾。(1)从每一个没有被标记的节点开始,一直走,直到出现环边停止;(3)当走到被其他路线标记过的点之后,路线会重复,不必继续走;(3)移动到下一个位置时的状态(无敌状态||普通状态),以此判断陷阱是否能走;(4)出现环边后根据边的编号计算环的大小,更新答案。(2)走的同时要为节点打上标记,并记录边的编号;(1)移动的坐标,以此判断是否到达终点;
2025-02-23 17:02:39
225
原创 蓝桥杯Day5 手算题|杂题
亮4个灯:相当于灭3个,注意灭完剩下的要连续。123,165,127,167,126,125, 124,164,163,432,437,456,457,435,436,431,451,452,756,723,20种。亮3个灯:123,165,127,167,126,432,437,456,457,435,726,735,亮2个灯:12,16,23,27,34,37,45,56,57,67,10种;725,736,756,723,16种;亮1个灯:1,2,3,4,5,6,7,7种;
2025-02-22 17:07:48
1193
原创 蓝桥杯 Day4 搜索|查找
本题同样用DFS求解,二维矩阵 a[ ][ ] 表示地图,记录起点和终点的坐标。a[x][y]=1,表示(x,y)为“+”;a[x][y]=0,表示(x,y)为“-”;a[x][y]=-1,表示(x,y)为“A”或“B”.若是,记录九宫幻方(ans[10][10] )及个数( cnt ),判断数目是否大于1。(1)存储矩阵中值为0的位置坐标 pair<int , int>p[10],以及其个数 n;(2)为矩阵中已经使用过的数做标记,vis[10];(2)矩阵每一行,每一列,每条对角线和都相同。
2025-02-21 18:22:29
389
原创 蓝桥杯Day3 枚举|模拟
用二维数组来表示方格图形。为了避免重复计算,用两个布尔数组a[ ],b[ ]来进行模拟,取值为1时代表已经灌溉过。a[ ]存储当前的灌溉情况,b[ ]数组表示后一分钟的灌溉情况,持续更新数组即可。用字符串获取日期的每一位数字比整型更加简单。将整型转换成字符串用到 to_string()函数。(2)在枚举出日期后,又应该如何判断日期是否回文。②我们只需要枚举出所有的合法日期,模拟日期的变化规律。首先要思考如何枚举出给定日期后面的日期。
2025-02-20 15:22:46
405
原创 蓝桥杯Day2枚举模拟
①若三个数分别是i,j,k,它们可以构造出(i,j,k)(i,k,j)(j,k,i)(j,i,k)(k,i,j)(k,j,i)六种方案。确定了 i 和 j 之后,k=2019-i-j,可以用二重循环进行枚举。规定 i<j<k 时才是合法方案,保证三个数字不会重复,减少枚举次数。统计分子、分母范围在1~2020之间,且分子分母的最大公约数(gcd)为1的分数的个数。遍历 1 到 2020 中的每一个数,对每个数取余数,判断是否为 2,记录答案。第(1)点很容易做到,用一个简单的while循环。
2025-02-19 12:02:52
332
原创 蓝桥杯Day1 枚举|模拟
很容易看出这道题是枚举,利用三重循环,i、j、k 均从1枚举到n,但是暴力所需时间太多,需要进行优化。我们只需要将n的所有因子计算出来,然后三重循环分别进行枚举。获取当前枚举数字的每一位,然后检查数字对应的卡片够不够,不够说明拼不了了。答案即为当前数-1。现给定0~9的卡片各2021张,小蓝将利用这些卡片从1开始连续拼凑数字,则小蓝最大可以拼到几?(1)定义 cnt[i] 表示数字 i 的卡片数目,初始化 cnt[0~9]=2021。直接从1开始向后枚举,同时检查剩下的卡片能不能拼出当前枚举到的数字。
2025-02-18 22:32:49
150
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人