- 博客(18)
- 收藏
- 关注
原创 尺取法/滑动窗口
l指针指向a[l]-a[i]==c的左端点,r指针指向a[r]-a[k]==c的右端+1位置,个数+=r-l,考虑下一个A(>=上一个A)时,区间开始还是上一个区间,避免重复计算。两个小朋友之间的距离不会超过圆周长的一半(定义两个小朋友的距离为沿着圆圈顺时针走或者逆时针走的最近距离),使用双指针,一个指针i在前面走(环状),一个指针j在后面,但距离超过圆周长的一半时,j赶上来,直至j遍历完整圈。初始化一个数据结构(如哈希表、数组等)来记录窗口内的状态(例如元素的出现次数、满足条件的元素数量等)。
2025-04-04 15:05:53
537
原创 <贪心算法>
二进制枚举——当每个个体都面对两种选择的时候,可以用一个01串表示,对于本题,每一行有选和不选两种可能,假设有5行的话,我们就可以用一个长度为5的01串来表示,0表示不选,1表示选,如:01001 表明选第2和第5行。在主包还没有接触算法的时候,就常听人提起“贪心”,当时是layman,根本不知道说的是什么,以为很难呢,但去了解一下,发现也不过如此嘛(bushi),还以为是什么高级东西呢(开个玩笑,本蒟蒻只会点基础的)。还有和上面一题相似的活动安排问题也是贪心的经典题,但我暂时找不到合适的题目出处,就用。
2025-04-02 20:43:00
889
原创 <背包问题>
背包问题是一类组合优化问题,其基本形式是给定一组物品,每个物品都有一个重量和一个价值,以及一个有限的背包容量,目标是在不超过背包容量的前提下,选择物品使得背包中的物品价值最大化。动态规划是解决背包问题的常用方法,你不会已经忘了之前讲过的线性dp了吧?没有就好;忘了赶紧去复习一下。
2025-03-29 16:35:45
683
原创 A+B problem
本蒟蒻最近有点忙,没时间写长文章了,本篇就写一些你应该知道的basic计算问题吧,虽然简单,但我想对初学者还是有些用处di,子曰,“学而时习之不亦说乎”。
2025-03-21 23:18:17
755
原创 拿下并查集
例如x-0-y-1-z-2-w,w为根节点,从节点x找到根节点w的过程中,x到z=(0+1)%3=1,x吃z,继续,x到z到w=(1+2)%3=0,x与w是同类,再查找的过程中进行路径压缩(大家可以自己再试些例子)。(又画了个图示,大家简单看看吧) 若x-y的关系为t,xa+ab+by=t(注意,是带方向的,by=-yb,我们存储的是子节点到根节点的关系,而负数取模可能会得到错误关系,所以我们用(3-yb)代表by,最后%3),那么ab=(t+yb-xa+3)%3(+3保证正数)
2025-03-16 15:58:22
1113
原创 wao,是并查集
最后要遍历0-9999,所以输入n个人的时候设置存在的人的编号为其编号,不存在的为-1,噢,对了,还要初始化父节点.最后再写个排序输出(真的好多步噢)补充一个小建议:表示根父节点的时候最好用find函数,不要就直接用p[i].f,它不一定指向根父节点,只有调用find函数路径上的点才会都指向跟父节点,所以不如直接用find ,vector容器大家也要去学下。并查集是一种用于管理元素所属集合的数据结构,可以高效的对元素进行分组(同组元素合并在一起),并且能快速的查询两个元素是否属于同一组。
2025-03-12 21:23:29
922
原创 二分法补充
解法:先检查0位置和n-1位置看是不是峰值,若都不是,中间一定会有峰值(左侧上升,右侧下降),看mid是否是峰值,若不是,若mid是下坡,则往左找,若mid是上坡,往右找(找一个就行了)三分法是在二分法的基础上提出的,增加了可求取极值的函数的种类(用来确定函数在凹/凸区间上的极值点),下图取自oceanstar的笔记。例:有一个n位数的无序数组,如[5,3,4,2,7,6,9],认为两侧的位置都是无穷小,返回其中一个峰值的下标,0,2,4,6都可。01分数规划也是在二分法的基础上,用来求分数的最值。
2025-03-10 22:10:18
539
原创 二分-入门版
会返回 数组末尾的下一个位置),该函数的底层实现其实就是二分查找,还有一个upper_bound()函数,返回的是第一个大于value的位置。本题我的代码并不严谨,最后还应该检查一下l和r是否存在的,若不存在则返回0,但因为我既想展示lower_bound()函数的使用又想给个二分查找的板子,所以最后没有检查了(两种途径的返回值不同),但本题测试点没考察这个,提交可AC。跳跃的最短距离为1,最大距离为L,二分查找mid,若mid符合题意,往右查找,看有没有更大的,若不成立往左。,(如果数组中没有大于等于。
2025-03-06 22:53:15
510
原创 最短路径之Floyd算法和dijkstra算法
首先要知道memset函数是以字节为单位进行赋值的,C++中int类型变量所占的位数为4个字节,4个字节均为0x3f时,数值大小为1061109567,也就是10^ 9级别的(和0x7fffffff一个数量级),而一般场合下的数据都是小于10^9的;这道题开始我是用dfs的但是超时了,搜题解最常见的是用dijkstra算法,看来这个算法也是很有必要学的。题目:有n个城市,m条路径,下面m行每行给出城市x,y和他们之间的距离z,求城市x到城市y的最短路径。本章就分享这么多了,好好吸收,好好总结!
2025-03-05 23:03:41
682
原创 前缀和和差分
的和==sum[x2][y2]-sum[x2][y1-1]-sum[x1-1][y2]+sum[x1-1][y1-1];的矩形区域内的元素和,等于a[i][j]+sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1],矩形区域。定义前缀和数组sum[i]表示a[1]-a[i]数据的和,则a[l]-a[r]也就==sum[r]-sum[l-1]。从a[1][1]到a[r][r]开始遍历,求a[x-r+1][y-r+1]到a[x][y]区域价值总和的最大值。中位数图 NC19913。
2025-03-03 22:42:30
912
原创 线性dp之股票系列问题
定义 dp[i][0] 表示第 i 天交易完后手里没有股票的最大利润,dp[i][1] 表示第 i 天交易完后手里持有一支股票的最大利润。用动态规划解题就是利用思路2,dp[i]表示前i天的最大利润,同样记录前i天的最低价格,状态转移方程为,dp[i]=max(dp[i−1],prices[i]−minprice)总的最大利润可能是没有卖出,卖出1次,或卖出2次的情况。定义dp[i][0]为第i天持有股票,dp[i][1]为第i天不持有股票且处在冷冻期,dp[i][2]为第i天不持有股票且不在冷冻期。
2025-03-03 18:39:40
625
原创 继续线性动态规划
定义dp[i][j]表示s[i]-s[j]的最长回文子序列,假设已知dp[i+1][j-1],若s[i]==s[j],则dp[i][j]=dp[i+1][j-1]+2,否则dp[i][j]=max(dp[i+1][j],dp[i][j-1]),最后dp[0][n]就是最长回文子串的长度。的最小路径和,到达最后一个元素(n,m)的最短路径,取决于到达(n - 1,m)和(n,m - 1)的元素的最短路径,dp[i][j] = a[i][j] + min(dp[i-1][j], dp[i][j-1])。
2025-03-01 23:04:50
451
原创 bfs广度优先搜索
不知道大家有没有遇到这种情况,比如在main()函数里定义了int a[10000000],运行代码后就会自动结束了(运行故障),而放到函数外,定义为全局变量,代码就能正常运行了。二维数组可以看作是我们的屏幕,由长宽组成,那么三维数组可以当作是再增加厚度的维度(一层一层叠起来,图emm意会一下吧),其它步骤都一样,就是求最短路径,直接放代码啦(大家所有文章最好是看一两道,然后后面就自己写,自己思考过了再来看我的代码o)1.使用一个队列来存储待访问的节点,使用一个数组来记录已访问的节点,避免重复访问。
2025-02-25 19:19:26
442
原创 dfs深度优先搜索
老师讲dfs的时候肯定会提到8皇后问题,这是一个经典的组合问题,虽然是老题目了,但小白拿来练习还是很合适的。:从第 1 行开始,逐行尝试放置皇后,递归处理下一行。:递归返回后,撤销当前放置,尝试下一个位置。
2025-02-22 17:08:29
503
原创 dfs求最短路最长路
最近先后写到了应用dfs求图中的最短路径和最长路径的长度的题目,那就整理分享一下吧,对小白学习并应用dfs应该还是有些benefits的。使用dfs解决问题的时候,可以观察到数据量都比较小。如果数据量大的话应想想其他方法,用dfs容易时间超限。接下来m行是类似于a b c这样的数据,表示从城市a到b有一条路,路程为c公里。需要注意的是这里的路都是单向的,求出x号城市到y号城市的最短距离。表示有n个城市,m条马路。思路直接附在代码旁别啦,上代码。
2025-02-21 20:20:08
359
原创 Dev-c++ iostream文件源码
昨天写代码的时候不知道怎么打开了iostream头文件,还把里面的内容修改了,一般来说大家恢复一下文件就好了,可是我当时没意识到,也不知道打开了什么,还把文件清空保存了,就没救了。然后我想网上找开源的iostream文件代码复制回去,可是都没找到,有也是好几年前的了。虽然dev已经是较老的编译器了,但使用还是很方便的。备份一个源码在网上吧!不知道为什么网上没有,侵权删。
2025-02-21 13:53:48
193
原创 全排列问题P1706
来社区的第127天,我终于要写自己的第一篇文章啦。全排列问题大佬们应该都会,可也有初入算法的小蒟蒻(比如我)。有问题请大家多多指教,互相分析,嘴下留情Oooooo。1~n里选r个数进行全排列,输出所有可能,并在最后输出有几种可能。还有个plus版分享一下,找不到出处了,也是之前看到过的题目。用dfs处理排列组合问题,直接在代码旁别注释啦,清楚点。示例,1~4里选2个数进行排列,有如下12种可能。思路是一样的,就是把个数改为r个,直接上代码啦。
2025-02-18 22:06:47
424
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人