自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++树状数组(超多例题讲解)适合有相应基础的

树状数组(Fenwick Tree)是一种用于高效计算前缀和的数据结构,具有较小的内存占用和较快的查询、更新操作。它广泛应用于解决一维数组的区间查询问题。树状数组的原理基于二进制的思想。假设有一个长度为n的数组A,树状数组就是用一个长度为n的辅助数组C来模拟A数组的前缀和。数组C的索引i表示原数组A的前i个元素的和,数组C的值表示A数组对应前缀的和。树状数组的核心操作有两个:区间和查询和单点更新。区间和查询:给定一个区间[l, r],要求计算出原数组A[l, r]的和。

2024-03-04 22:27:25 1036 1

原创 c++滑动窗口

C++中实现滑动窗口,可以使用双指针法。双指针法适用于有序数组或者字符串的问题,可以将时间复杂度从O(n^2)优化到O(n)。具体实现步骤如下:1. 定义left和right两个指针,分别指向滑动窗口的左右边界。2. 当滑动窗口满足条件时,不断移动右指针,扩大窗口。3. 当滑动窗口不再满足条件时,不断移动左指针,缩小窗口。4. 在滑动窗口的过程中,记录窗口中的最大值或者最小值,即为问题的解。

2023-12-02 09:36:42 701 1

原创 kmp个人理解

ababcab的前缀{a,ab,aba,abab,ababc,ababca},后缀{b,ab,cab,bcab,abcab,babcab},所以next[7]=2。ababca的前缀{a,ab,aba,abab,ababc},后缀{a,ca,bca,abca,babca},所以next[6] = 1;ababc的前缀{a,ab,aba,abab},后缀{c,bc,abc,babc},所以next[5] = 1;abab的前缀{a,ab,aba},后缀{b,ab,bab},所以next[4] = 2;

2023-10-29 10:39:54 191 1

原创 c++新年好和通信路线(acwing)

第一个问题在于枚举先看题目:重庆城里有 n个车站,m 条公路连接其中的某些车站。每两个车站最多用一条公路连接,从任何一个车站出发都可以经过一条或者多条公路到达其他车站,但不同的路径需要花费的时间可能不同。在一条路径上花费的时间等于路径上所有公路需要的时间之和。佳佳的家在车站 11,他有五个亲戚,分别住在车站 a,b,c,d,e。过年了,他需要从自己的家出发,拜访每个亲戚(顺序任意),给他们送去节日的祝福。怎样走,才需要最少的时间?

2023-10-24 16:08:43 218

原创 c++通行路线(acwing)

在郊区有 N 座通信基站,P条电缆,第 i 条电缆连接基站 Ai 和 Bi。特别地,1 号基站是通信公司的总站,N 号基站位于一座农场中。现在,农场主希望对通信线路进行升级,其中升级第 i 条电缆需要花费 Li。电话公司正在举行优惠活动。农产主可以指定一条从 1 号基站到 N号基站的路径,并指定路径上不超过 K 条电缆,由电话公司免费提供升级服务。农场主只需要支付在该路径上剩余的电缆中,升级价格最贵的那条电缆的花费即可。求至少用多少钱可以完成升级。

2023-10-20 15:20:35 130

原创 c++香甜的黄油(acwing)

农夫John发现了做出全威斯康辛州最甜的黄油的方法:糖。把糖放在一片牧场上,他知道 N 只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油。当然,他将付出额外的费用在奶牛上。农夫John很狡猾,就像以前的巴甫洛夫,他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场。他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶。农夫John知道每只奶牛都在各自喜欢的牧场(一个牧场不一定只有一头牛)。给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那)。。

2023-10-16 14:56:36 171

原创 c++最小步数模型(魔板)

C++ 最小步数模型通常用于寻找两个点之间的最短路径或最少步数。在这个例子中,我们使用了广度优先搜索算法(BFS)来遍历整个图,并计算每个点到起点的最短距离。具体地,我们将起点加入队列中,并在之后的每个循环中依次访问队列中的每个点。对于每个访问过的点,我们遍历与其相邻的所有节点,并在遇到未访问过的节点时将其加入队列,并更新其距离,即。最后,我们输出终点n到起点的最短距离d[n]。注意,我们还需要使用一个数组vis来记录每个节点是否已经被访问过。

2023-09-25 23:08:35 253

原创 c++多源BFS

C++多源BFS(Multiple Source BFS)是一种基于广度优先搜索的算法,用于在一个图中找到多个起点到达同一个目标点的最短路径。2.进行BFS:从队列中取出一个起点,遍历其周围的点,若该点未被访问过,则将其加入队列中,并更新它的距离为当前起点的距离+1。一个 N 行 M 列的矩阵 B,相邻两个整数之间用一个空格隔开。3、判断入队的条件,如果字符为1,那么该点的距离为0,而且入队。1.初始化:将所有起点的坐标加入队列,并将它们的距离设为0。5、跳的点的距离等于上一个点的距离再加一。

2023-09-24 10:06:01 152 2

原创 c++最短路模型(抓住那头牛)

3、判断三种情况,这里顺序随便,因为最终取结果的时候,只会取最先到达的结果。农夫和牛都位于数轴上,农夫起始位于点 N,牛位于点 K。从 X 移动到 X−1或 X+1,每次移动花费一分钟。2、初始化距离,并且最开始的点为n,点n的距离为0。从 X 移动到 2∗X,每次移动花费一分钟。假设牛没有意识到农夫的行动,站在原地不动。输出一个整数,表示抓到牛所花费的最少时间。1、q[]记录跳的点,dist[]记录距离。农夫知道一头牛的位置,想要抓住它。农夫最少要花多少时间才能抓住牛?共一行,包含两个整数N和K。

2023-09-24 09:28:30 582

原创 c++Flood Fill算法之池塘计数,城堡问题,山峰与山谷(acwing)

Flood Fill算法有很多应用场景,以下是一些常见的应用场景:1. 图像处理:在图像处理中,我们通常需要对图像的某一个区域进行涂色、填充、描边等操作,Flood Fill算法就可以用来实现这些操作。2. 游戏开发:在游戏中,Flood Fill算法可以用来实现区域填充、地图探索、迷宫求解等功能。3. 自动化绘制:Flood Fill算法可以用于自动化绘制图形、图案等。4. CAD设计:Flood Fill算法可以用于CAD设计中的填充、切割等操作。

2023-09-21 10:45:04 310

原创 c++P1462 通往奥格瑞玛的道路(acwing版)

表示城市 ai​ 和城市 bi​ 之间有一条公路,如果从城市 ai​ 到城市 bi​,或者从城市 bi​ 到城市 ai​,会损失 ci​ 的血量。假设 1 为暴风城,n 为奥格瑞玛,而他的血量最多为 b,出发时他的血量是满的。歪嘴哦不希望花很多钱,他想知道,在可以到达奥格瑞玛的情况下,他所经过的所有城市中最多的一次收取的费用的最小值是多少。城市之间有 m 条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联盟的攻击,进而损失一定的血量。分别表示有 n 个城市,m 条公路,歪嘴哦的血量为 b。

2023-09-19 16:53:31 129

原创 c++最短路计数(acwing版)

先看题目:给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1 到 N。问从顶点 1 开始,到其他每个点的最短路有几条。

2023-09-19 11:34:15 114

原创 c++用dijkstra堆优化版求严格次短路(洛谷p2865)acwing(Tle)版本

贝茜所在的乡村有 R(1\le R \le 10^5)R(1≤R≤105) 条双向道路,每条路都联结了所有的 N(1\le N\le 5000)N(1≤N≤5000) 个农场中的某两个。当然咯,第二短路的长度必须严格大于最短路(可能有多条)的长度,但它的长度必须不大于所有除最短路外的路径的长度。贝茜很喜欢路边的风景,不想那么快地结束她的旅途,于是她每次回农场,都会选择第二短的路径,而不象我们所习惯的那样,选择最短路。要是当前新加入的点比最短路还要短,就先吧次短路更新为当前的最短路,再把最短路更新,

2023-09-19 10:03:51 166

原创 c++分层最短路(洛谷飞行路线)acwing版

分层最短路算法是在SPFA算法的基础上,将每个点分成若干层,从而使得每个点之间的转移只在同一层次或上下两个相邻层次之间进行,减少了每轮的迭代次数,优化了算法的效率。先看题目:Alice 和 Bob 现在要乘飞机旅行,他们选择了一家相对便宜的航空公司。该航空公司一共在 nn 个城市设有业务,设这些城市分别标记为 00 到 n-1n−1,一共有 mm 种航线,每种航线连接两个城市,并且航线有一定的价格。Alice 和 Bob 现在要从一个城市沿着航线到达另一个城市,途中可以进行转机。

2023-09-15 16:59:09 167

原创 c++二维费用的背包问题(模版)

C++二维费用的背包问题是一个经典的动态规划问题,解决的是在给定容量和价值的情况下,如何选择一定数量的物品来最大化总价值的问题。但是,与一维背包问题不同的是,二维费用的背包问题中每个物品都有两个与之关联的费用,因此需要在二维数组中存储状态。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。第一行三个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。有 N 件物品和一个容量是 V 的背包,背包能承受的最大重量是 M。

2023-07-21 16:22:45 112

原创 c++混合背包问题(多重背包二进制优化)

混合背包问题是指在一个背包中可以装入多种不同的物品,每种物品有自己的重量和价值,同时每种物品又有固定的数量限制。表示物品的数量限制。如果该物品数量无限,则将该物品视为完全背包问题,按照完全背包的方式添加重量和价值。如果该物品数量为1,则将该物品视为01背包问题,添加一次该物品的重量和价值即可。最终,将所有物品按照上述方式进行转换并加入背包中,即可得到混合背包问题的最优解。如果该物品数量有限,则将该物品视为多次背包问题,采用一般化方法进行计算。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。

2023-07-21 16:09:31 304

原创 c++多重背包(单调队列优化)

(j-q[tail])/v[i]是统计队尾和j之间差了k个数,乘w[i]是因为实际上队尾和j之间还差了k个w[i]f[i-1][q[tail]]是刚才的队尾(当前其实已经是j,但j还未加进去,现在正在保证队列单调性),其中,w[i]表示第i个物品的重量,v[i]表示第i个物品的价值,cnt[i]表示第i个物品的数量。

2023-07-21 15:33:47 87

原创 c++买书(完全背包问题求方案数)

题目:小明手里有n元钱全部用来买书,书的价格为10元,20元,50元,100元。问小明有多少种买书方案?(每种书可购买多本)

2023-07-11 17:04:45 499

原创 c++数字组合(01背包求方案数)

给定 N 个正整数 A1,A2,…,AN,从中选出若干个数,使它们的和为 M,求有多少种选择方案。第二行包含 N 个整数,表示 A1,A2,…第一行包含两个整数 N 和 M。包含一个整数,表示可选方案数。答案保证在 int 范围内。

2023-07-11 17:00:24 353

原创 c++宠物小精灵之收服(二维费用的背包问题)

题目:宠物小精灵是一部讲述小智和他的搭档皮卡丘一起冒险的故事。一天,小智和皮卡丘来到了小精灵狩猎场,里面有很多珍贵的野生宠物小精灵。小智也想收服其中的一些小精灵。然而,野生的小精灵并不那么容易被收服。对于每一个野生小精灵而言,小智可能需要使用很多个精灵球才能收服它,而在收服过程中,野生小精灵也会对皮卡丘造成一定的伤害(从而减少皮卡丘的体力)。当皮卡丘的体力小于等于0时,小智就必须结束狩猎(因为他需要给皮卡丘疗伤),而使得皮卡丘体力小于等于0的野生小精灵也不会被小智收服。

2023-07-11 16:38:48 1629

原创 c++滑雪以及电(深度理解)

现在给定你一个二维矩阵表示滑雪场各区域的高度,请你找出在该滑雪场中能够完成的最长滑雪轨迹,并输出其长度(可经过最大区域数)。结果表示为 Case #x: y,其中 x 为组别编号(从 1 开始),y 为可以通电的最大节点数量。当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。这些电力节点形成的电力网络,可以看作一个 N 个节点 N−1 条边的连通图。每个电力节点都有一个固定的电容,其中第 i 个节点的电容为 Ai。在给定矩阵中,一条可行的滑行轨迹为 24−17−2−1。

2023-07-06 14:04:58 330

原创 c++导弹拦截(算法竞赛进阶指南)

例如,一套系统先后拦截了高度为 3 和高度为 4 的两发导弹,那么接下来该系统就只能拦截高度大于 4 的导弹。给定即将袭来的一系列导弹的高度,请你求出至少需要多少套防御系统,就可以将它们全部击落。1、h[N]数组代表高度,up[N],down[N]数组代表上升和下降的储存数组。一套击落高度为 3,4 的导弹,另一套击落高度为 5,2,1 的导弹。对于每个测试用例,输出一个占据一行的整数,表示所需的防御系统数量。第二行包含 n 个不同的整数,表示每个导弹的高度。对于给出样例,最少需要两套防御系统。

2023-07-05 15:53:00 658

原创 c++64位整数乘法(龟速幂)

第一行输入整数a,第二行输入整数b,第三行输入整数p。因为两个64位的数值的数相乘会爆LL,所以用到位运算。输出一个整数,表示a*b mod p的值。求 a 乘 b 对 p 取模的值。

2023-07-05 14:41:51 353

原创 c++最大上升子序列和(详解)

在MASS问题中,给定一个正整数序列,求最长的上升子序列,并且要求这个上升子序列的和最大。注意,最长的上升子序列的和不一定是最大的,比如序列(100,1,2,3)的最大上升子序列和为100,而最长上升子序列为(1,2,3)。比如,对于序列(1,7,3,5,9,4,8),有它的一些上升子序列,如(1,7),(3,4,8)等等。

2023-07-05 11:01:09 790

原创 c++合唱队形(详解)

最长上升子序列(Longest Increasing Subsequence,简称LIS)是指在一个序列中,选取其中的若干个元素构成一个新的子序列,要求选出的元素满足递增的关系,且该子序列的长度最大。在计算dp[i]的值时,从0到i-1遍历前面的元素,如果发现某个元素arr[j]小于arr[i],则dp[i]的值可以更新为dp[j]+1。具体思路为:从序列的第一个元素开始,依次计算每个元素作为子序列的最后一个元素时的最长上升子序列长度,并记录下来,最终得到整个序列的最长上升子序列长度。Ti+1>…

2023-07-04 15:33:52 1189

原创 c++递增子串(每日一题)

他了解到,如果一个长度为 L 的大写字母构成的字符串 C,满足对于每对索引 i,j(1≤i≤j≤L,索引编号 1∼L),位置 i 处的字符均小于位置 j 处的字符,则该字符串是严格递增的。结果表示为 Case #x: y1 y2 ... yn,其中 xx 为组别编号(从 1 开始),yi为以位置 i 结束的最长严格递增子串的长度。给定一个长度为 N 的字符串 S,请你计算对于每个位置 ii(1≤i≤N),以该位置结束的最长严格递增子串的长度是多少?测试点 22 (大数据测试点):1≤N≤2×10^5。

2023-07-04 14:48:02 229

原创 c++马走日(DFS之搜索顺序)详解

在DFS中,我们沿着每个分支前进,直到无法前进为止,然后返回上一个分支并前进,直到所有的分支都被探索。例如,当我们需要在由字母组成的单词列表中找到所有的单词时,我们可以使用DFS来搜索单词列表,按字母顺序筛选出所需的单词。在某些问题中,我们需要找到所有的解决方案。请编写一段程序,给定 n∗m大小的棋盘,以及马的初始位置 (x,y),要求不能重复经过棋盘上的同一个点,计算马可以有多少途径遍历棋盘上的所有点。每组测试数据包含一行,为一个整数,表示马能遍历棋盘的途径总数,若无法遍历棋盘上的所有点则输出 0。

2023-07-03 23:47:08 449

原创 c++红与黑(DFS之连通性模型)

具体实现过程中,我们可以从一个起点开始遍历整个图,标记遍历到的节点为已访问,若最终遍历到的节点数量等于图中节点总数,则说明整个图是连通的;注意:其实这题也可以用bfs做,但是可以用dfs,代码量可以减少,更方便理解和解题,所以我们在既可以用dfs,也可以用bfs,一般选择dfs。3、判断开始的条件,并且每一遍都要初始化st数组,因为换数据的时候每一个点都是没有被使用过的。6、出界和当前点被使用过了就重新开始,不然的话cnt++,继续深搜,然后回溯,返回cnt。3)‘@’:黑色的瓷砖,并且你站在这块瓷砖上。

2023-07-03 00:02:22 264

原创 c++传纸条(类似于方格取数)

还有一件事情需要注意,全班每个同学愿意帮忙的好感度有高有低(注意:小渊和小轩的好心程度没有定义,输入时用 0 表示),可以用一个 0∼100 的自然数来表示,数越大表示越好心。接下来的 mm 行是一个 m×n 的矩阵,矩阵中第 i 行 j 列的整数表示坐在第 i 行 j 列的学生的好心程度,每行的 n 个整数之间用空格隔开。班里每个同学都可以帮他们传递,但只会帮他们一次,也就是说如果此人在小渊递给小轩纸条的时候帮忙,那么在小轩递给小渊的时候就不会再帮忙,反之亦然。幸运的是,他们可以通过传纸条来进行交流。

2023-07-01 16:09:27 461

原创 c++摘花生

每组数据的接下来R行数据,从北向南依次描述每行花生苗的情况。每行数据有C个整数,按从西向东的顺序描述了该行每株花生苗上的花生数目M。地里每个道路的交叉点上都有种着一株花生苗,上面有若干颗花生,经过一株花生苗就能摘走该它上面所有的花生。对每组输入数据,输出一行,内容为Hello Kitty能摘到得最多的花生颗数。2、如果下标从0开始存入,那么最后输出的记得是n-1,m-1,因为取不到n和m。每组数据的第一行是两个整数,分别代表花生苗的行数R和列数 C。情况1:从东走过来的,所以是f[i][j-1],

2023-07-01 14:51:32 690

原创 c++最大不相交区间数量(贪心)

给定 N 个闭区间 [a,b],请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。和刚刚的那道题目很相似,这道题目是求让一个大区间分为各个小区间所需点的最小值。接下来 N 行,每行包含两个整数 a,b,表示一个区间的两个端点。要是一段区间的最左边大于另外一个的左端点,所需的点++,更新当前点。输出一个整数,表示所需的点的最小数量。位于区间端点上的点也算作区间内。第一行包含整数 N,表示区间数。输出选择的点的最小数量。

2023-06-28 19:37:08 245

原创 c++区间选点(贪心)

贪心算法(Greedy Algorithm)是一种基于贪心思想实现的算法,它是一种在局部最优的情况下朝着全局最优解前进的算法思想。贪心算法通常得到的结果不一定是全局最优解,但是对于某些问题,贪心算法得到的结果是最优解。需要注意的是,在某些情况下,贪心算法得到的结果是局部最优解而不是全局最优解,此时需要使用其他算法来找到全局最优解,例如动态规划算法等。1、看一个结构体数组,存储区间的左右端点,如果自身的右端点小于外界的右端点,返回true,否则返回false。输出一个整数,表示所需的点的最小数量。

2023-06-28 18:49:18 319

原创 c++组合数进阶版

给定 n 组询问,每组询问给定三个整数 a,b,p,其中 p 是质数,请你输出 Cbamodp 的值。这里用到高精度和筛质数的办法,不懂的小伙伴可以翻看相对应的博客。特点:要求的数很大 ,所以要利用一些定理拆分。接下来 n 行,每行包含一组 a,b,p。注意结果可能很大,需要使用高精度计算。共 n 行,每行输出一个询问的解。共一行,包含两个整数 a 和 b。输入 a,b,求 Cba 的值。利用卢克斯定理,这里就不详讲了。共一行,输出 Cba 的值。第一行包含整数 n。

2023-06-28 14:58:21 441

原创 c++滑雪(记忆化搜索)

现在给定你一个二维矩阵表示滑雪场各区域的高度,请你找出在该滑雪场中能够完成的最长滑雪轨迹,并输出其长度(可经过最大区域数)。在给定矩阵中,最长的滑行轨迹为 25−24−23−…当然,一个人能够滑动到某相邻区域的前提是该区域的高度低于自己目前所在区域的高度。矩阵中第 i 行第 j 列的点表示滑雪场的第 i 行第 j 列区域的高度。接下来 R 行,每行包含 C 个整数,表示完整的二维矩阵。给定一个 R 行 C 列的矩阵,表示一个矩形网格滑雪场。在给定矩阵中,一条可行的滑行轨迹为 24−17−2−1。

2023-06-28 14:20:50 422

原创 c++没有上司的舞会

知识点:树形DP先看题目Ural 大学有 N 名职员,编号为 1∼N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 Hi给出,其中 1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。

2023-06-28 13:38:49 79

原创 c++状态压缩dp

在当前行中,只有每个空闲格子都被覆盖的时候才能进行转移,即当前状态中的 $0$ 必须出现在某个 $p$ 的 $1$ 上面。同时,由于每个 $1$ 可以覆盖两个 $0$,所以转移后的状态中的 $1$ 的数量不能超过 $M$。设 $f_{i,j}$ 表示第 $i$ 行,状态为 $j$ 时的方案数,其中 $j$ 是一个二进制数,表示第 $i$ 行每个位置的状态。若 $j$ 的第 $k$ 位为 $0$,则表示第 $i$ 行第 $k$ 个格子是空闲的,否则表示是被覆盖的。最终的答案是 $f_{N,0}$。

2023-06-27 20:11:21 135

原创 c++计数统计

dp[i][j][k] = dp[i-1][j][k-cnt[i][j]] + dp[i][j-1][k] ,其中 cnt[i][j] 表示第 i 位上数字 j 出现的次数,即 cnt[i][j] = cnt[i-1][j]+(j==当前位的数字)。其中,第一项表示第 i 位上数字 j 出现了 cnt[i][j] 次,那么前 i-1 位上数字 j 出现的次数就要减去 cnt[i][j];接下来,我们需要进行动态规划。我们设 dp[i][j][k] 表示前 i 位数字中数字 j 出现了 k 次的方案数。

2023-06-27 16:55:46 3047

原创 c++01背包问题

现在有n个物品,每个物品的重量为w[i],价值为v[i]。如果选当前物品,则最大价值就是前i-1个物品中,体积为j-w[i]的最大价值加上当前物品的价值v[i],即f[i-1][j-w[i]]+v[i]。在该代码中,我们使用f[i][j]表示选前i个物品,体积为j时的最大价值,其中i=1,2,3,...,n,j=0,1,2,...,m。如果不选当前物品,则最大价值就是前i-1个物品中,体积为j的最大价值f[i-1][j]。其中,每个物品只有一个,要么装入背包,要么不装,因此称为01背包问题。

2023-06-27 07:51:51 1022

原创 c++ 详讲求组合数

组合数的概念是指从n个不同元素中取出m个元素的方案数,可以表示为C(n,m),也可以表示为n choose m。这种方式比递归方式更高效,因为递归方式存在大量的重复计算,而迭代方式可以通过记录中间结果来避免重复计算。思路:第一层循环从底数开始,所以从N开始,第二层循环从i开始,减少时间复杂度,下面那就是一个数学公式。给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7) 的值。给定 n 组询问,每组询问给定两个整数 a,b,请你输出 Cbamod(109+7)的值。

2023-06-14 10:01:32 2521

原创 c++ 二分图的最大匹配

二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。给定一个二分图,其中左半部包含 n1个点(编号 1∼n1),右半部包含 n2个点(编号 1∼n2),二分图共包含 m 条边。接下来 m 行,每行包含两个整数 u 和 v,表示左半部点集中的点 u 和右半部点集中的点 v 之间存在一条边。二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。输出一个整数,表示二分图的最大匹配数。

2023-06-12 21:04:35 167

空空如也

空空如也

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

TA关注的人

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