- 博客(21)
- 收藏
- 关注
原创 c++中的欧拉筛
if (a == 1)//1既不是质数,也不是合数,所以不能从他开始a = 2;i<=b;i++)if (!vis[i])//vis为0, 说明这个数是质数//防止越界(背)//控制复杂度(背)return;
2024-05-28 22:05:27
449
原创 区间dp的模板
2.外循环遍历区间长度len,内循环遍历左起点l,右端点就是i+len-1,最内层遍历分界点k (l~r-1)f [ i ] [ j ] 表示在 i 到 j 这个区间里面,代表的某个属性。k一定要是从l开始遍历,直到r的前一个数。1.将数据读入完后,计算前缀和。,因为要保证k+1小于r,3.输出dp[1][n]
2024-04-15 19:58:13
338
1
原创 多重背包问题
这里 c = s -(2^0 + 2^1 + 2^2 + ....... + 2^k) ,将每个物品可拆分的2的整数次方线性地存放在一个一维数组里面。思想:将三层嵌套优化成两层。对于每个物品 都可以用2的整数次方去家和,所以将最大数量拆分。然后,在用01背包问题即可,再单数组优化。
2024-04-15 18:29:10
169
1
原创 完全背包问题(朴素+优化)
朴素情况下我们需要循环0~k次,但是我们可以发现 f[ i , j ] = f [ i , j - v[i] ] + w[ i ]。与01背包问题唯一的区别是这里的物品可以无限次拿取,但不能超过背包总容量。所以会多一层循环列举同一件物品拿了多少次。因为 f [ i , j - v[i] ] 肯定是在 f[ i , j ] 前被更新,所以代码变成。这行代码本质上就是判断该物品到底要拿多少个,所以是在0~k个里面找出最大值。其核心也是判断要不要放入第i件物品。
2024-04-11 20:21:04
261
原创 01背包问题(朴素+优化)
max( f[j] , f[j - v[i]] )表示比较(把包空出v[i]的容积拿w[i])和(不拿w[i])哪个价格更高。f [i] [j] 表示的是一个最大值,在循环的时候会把所有情况的最大值都记录下来。后面两种情况都包含在 if (j > v[i]) 里。,v数组表示每个物品的体积,w数组表示每个物品的价格。f[i] 表示在背包容量是i的情况下能装的最大价值。n指的是物品的总数量,m是背包的总容量。
2024-04-11 19:20:02
292
原创 spfa求是否有负环
3创立一个cnt数组,用于存放从起始点到该点的路径通过了多少边,当cnt值大于n时,出现负环。2.不需要初始化dist,为0就行。因为负环只出现在w为负的情况,0会被负数更新。1.需要先将所有点都放入对列中,st数组初始化为true。
2024-04-01 19:24:18
186
原创 Dijkstra求最短路(通过邻接表实现)
邻接表实现思路与邻接矩阵思路上一致,最小根队列可以的队头是所有元素中最小的,省去了用for循环判断最小dist的过程。而且,在使用确定的点更新链接的点时候,队列保存的点就是与该确定的点直接连接的点,所以也不需要for循环判断。而且队列是弹出的时候确定下该点是最小dist,这时候判断这个数是否已经弹出过,若不是就st=true。
2024-04-01 16:53:22
289
原创 Dijkstra求最短路(通过邻接矩阵实现)
其方式为:判断 (剩余每个点到原点的距离) 和 (本轮确定的点到原点的距离+确定的点到剩余每个点的距离)哪个更小,dist =min (0x3f , dist[t]+0x3f) = 0x3f。2.将dist初始化为无穷大,因为后面要取较小的dist。1.先将每a和b两点间距离设置为0x3f(无穷大),然后再读取每个g[a][b]的值。4.在确定了一个点后,可以用该点去更新剩下所有和他有链接的点的dist。5.当第n个点的dist还是0x3f的时候说明,他和其他点压根连不上。
2024-03-29 20:30:46
813
1
原创 stl全排列
返回类型为true和false,存在下一个序列返回true,不存在返回false,(1)next_permutation:求下一个排列组合。(2)prev_permutation:求上一个排列组合。对于一个含有n个元素的数组全排列,一共有n!
2024-03-06 18:59:28
137
1
原创 高精度加法运算
高精度加法主要用于c和c++中,在c和c++中位数特别大的数字不能直接相加,否则会计算出错,在这里需要通过高精度加法运算,其本质上是模拟两个数每个位数相加,逢十进一的计算方式,也就是小学的加法运算。例如,125+456,我们就需要先将5和6相加为11,再逢十进一,使答案的个位为1,然后再将十位上的2和5相加,再加上进位的1。这里我们想实现这样的模拟,需要将两个数先以数组的形式保存。
2024-02-26 18:10:16
168
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人