- 博客(117)
- 收藏
- 关注
原创 状压 DP(P1896 [SCOI2005] 互不侵犯/P5911 [POI 2004] PRZ/P1879 [USACO06NOV] Corn Fields G)
使用一个n位的二进制数mask表示当前已过桥的队员集合,其中第i位为1表示第i个队员已过桥。dp[mask]表示过桥队员集合为mask时的最小总时间。
2025-08-21 20:45:18
573
原创 DAG的DP(UVA437 巴比伦塔 The Tower of Babylon)
DAG 是一种没有环路的有向图,具有拓扑序特性。动态规划在 DAG 上的应用通常基于拓扑序或记忆化搜索。(像我这种暂时还没学过拓扑排序的可以用dfs+记忆化搜索)
2025-08-21 20:17:13
704
原创 树上背包(P2014 [CTSC1997] 选课)
树上背包问题指的是在树形结构上进行动态规划,结合背包问题的思想,通常用于解决子树资源分配或依赖选择的问题。这类问题通常涉及节点间的依赖关系,需要在树上进行状态转移。
2025-08-20 23:19:01
224
原创 换根DP(P3478 [POI 2008] STA-StationP3574 [POI 2014] FAR-FarmCraft)
换根DP(又称二次扫描法)是一种树形动态规划技术,用于解决需要以每个节点为根重新计算子树信息的问题。核心思想是通过一次DFS预处理子树信息,再通过第二次DFS利用父节点信息推导其他根节点的结果,避免对每个根节点单独计算,将时间复杂度优化至O(n)。
2025-08-20 23:17:49
310
原创 牛客周赛 Round 105(小苯的xor构造/小苯的权值计算/小苯的01矩阵构造/小苯的重排构造/小苯的xor图/小苯的前缀gcd构造)
建立每个数的所有因数的查找表a[51],其中a[i]存储了i的所有因数(从大到小排列)的分布,确保差值最大化,再通过交替输出剩余元素满足最小差值条件。多举一些样例就可以看出k 为奇数时不存在。用于将除法转换为乘法,满足模运算性质。该算法通过贪心策略优先处理。遍历输入数组,分别统计。
2025-08-18 21:26:12
924
原创 vscode怎么安装MINGW
点击设置,查看高级系统设置(点击)->环境变量。将路径新建复制到用户变量和系统变量中。找到安装好的mingw的文件夹。点击mingw64->bin。
2025-07-23 20:20:11
426
原创 牛客周赛 Round 101(题解的token计算, 76修地铁 ,76选数,76构造,qcjj寄快递,幂中幂plus)
n组成的数最大设为max_n,max_n=n的二进制位都为1;是ln(1+n),提供更高的数值精。是自然对数(以e为底)ln(n。1的gcd()=1所以m为奇数。
2025-07-21 16:02:19
430
原创 P3842 [TJOI2007] 线段
提供的代码使用动态规划来解决这个问题:a[]数组存储每行线段的左右端点dp[]数组存储到达每行左右端点的最小路径长度sth():计算从上一行的某个位置到当前行某个位置的路径长度pan参数决定是从左到右还是从右到左遍历当前行:对于每一行,计算从左端点和右端点出发的最短路径考虑两种遍历方式(从左到右或从右到左)使用min()函数选择更优的路径:第一行的处理是特殊情况最后需要从最后一行到达(n,n)
2025-07-15 23:21:00
234
原创 STL的一些知识点
后进先出(LIFO)结构,仅允许在栈顶进行插入和删除操作。先进先出(FIFO)结构,元素从队尾入队,从队首出队。将两个值组合为单一对象,通常用于关联数据。存储唯一元素的有序容器,基于红黑树实现。的键值对、返回多个值(如函数返回值)。支持在两端高效插入和删除的线性结构。
2025-07-15 23:00:53
476
原创 《区间dp》
区间动态规划是一种用于解决涉及区间最优解的动态规划方法,通常适用于需要枚举或合并子区间的问题。其核心思想是将问题分解为更小的区间,通过状态转移方程合并子区间的结果。
2025-07-13 23:08:43
183
原创 牛客周赛 Round 100
dp题,但我有点小菜,目前还=没有学过这种dp,会的大佬可以留言告诉我。没什么好说的 直接 1 1 2 2 3 3 4 4……这题好像是dp题,但我没有用dp来写。G 小红的双排列期望(hard)
2025-07-13 23:01:36
501
原创 《背包问题》
0-1背包问题是一个经典的动态规划问题,描述如下:给定一组物品,每个物品有重量和价值,在限定的总重量内选择若干物品装入背包,使得背包中物品的总价值最大。每个物品只能选择装入或不装入(即“0-1”选择)。多重背包问题是背包问题的一种变体,其中每种物品有有限的数量可供选择。与0-1背包问题(每种物品只能选一次)和完全背包问题(每种物品无限次选择)不同,多重背包问题的物品数量介于两者之间。
2025-07-09 21:43:36
945
原创 B. Shrinking Array/缩小数组
3.剩余情况是成立的,然后找最小的可能(存在的可能只在差为正负的交界处);在第二个测试用例中,不可能使数组变得美丽,因为应用操作会使其大小减少到少于两个。变得美丽所需的操作最小数量,或者如果不可能使其变得美丽,则输出。计算使数组变得美丽所需的最少操作次数,或者报告不可能。在第一个测试用例中,给定的数组已经是美丽的,因为。,如果它至少包含两个元素,并且存在一个位置。显然,数组的大小将减少。1.当相邻的值为-1,0,1时,直接成立。在第三个测试用例中,例如,你可以选择。在第四个测试用例中,例如,你可以选择。
2025-07-08 22:33:20
267
原创 动态规划基础--------最长上升子序列
记忆化搜索是一种通过记录已经遍历过的状态的信息,从而避免对同一状态重复遍历的搜索实现方式。因为记忆化搜索确保了每个状态只访问一次,它也是一种常见的动态规划实现方式。
2025-07-08 22:13:15
744
原创 公交路线系统------大一数据结构与算法课设
xxxxxxxxxx-xxx-公交路线系统.docx文档(文档)公交路线系统-大一数据结构与算法(要求)大一公交路线系统.zip(代码)
2025-07-07 10:32:41
156
原创 牛客周赛99
a[i] > i && a[i] > a[i - 1]且只出现一次时)或(本身就为a[i])可以不用变为i,剩下的都要变。我这题的解题思路可能不是特别好。大概就是它(后面出现。
2025-07-06 23:26:12
455
原创 求小数、分数、负数的模运算
模运算(Modulo Operation)用于计算两数相除后的余数。对于整数a和正整数m,a mod m的结果是一个非负整数,范围在0到m-1之间。对于小数、分数和负数,需要特殊处理。负数模运算可以通过调整结果使其落在0到m-1之间。公式如下: [ a \mod m = (a % m + m) % m ] 其中,是C++默认的取余运算,可能产生负结果。C++代码示例:解释:如果为负,加上m后再取模确保结果非负。分数模运算通常通过计算分母的模逆元(Modular Multiplicative Inve
2025-07-06 17:02:07
290
原创 Treap树
Treap(Tree + Heap)是一种结合二叉搜索树(BST)和堆(Heap)特性的数据结构。每个节点包含两个值:通过随机分配优先级,Treap在期望上能保持平衡,避免普通BST退化为链表的极端情况。插入操作删除操作查找操作与普通BST相同,时间复杂度为 (O(\log n))(期望)。旋转Treap基础概念核心逻辑:按照BST规则插入后,通过旋转恢复堆性质。核心逻辑:通过旋转将待删除节点移至叶子节点后直接删除。排名定义:小于该值的节点数 + 1。例题:
2025-07-03 23:16:39
524
原创 树状数组 2
对于 100% 的数据:1≤N,M≤500000,1≤x,y≤n,保证任意时刻序列中任意元素的绝对值都不大于 230。差分数组可以有效处理区间增量操作,树状数组(Fenwick Tree)可以高效实现差分数组的前缀和查询。第二行包含 N 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。第一行包含两个整数 N、M,分别表示该数列数字的个数和操作的总个数。对于 70%的数据:N≤10000,M≤10000;输出包含若干行整数,即为所有操作 22 的结果。对于 30%的数据:N≤8,M≤10;
2025-06-17 22:36:35
577
原创 文件操作
C和C++语言提供了多种文件操作方法,包括标准C库函数和C++的fstream类。文件操作通常涉及打开、读写、关闭等基本操作。标准C库使用FILE结构体和一系列函数进行文件操作,主要函数包括fopen、fclose、fread、fwrite等。文件操作是程序与外部存储设备交互的重要方式,主要涉及文件的创建、读写、关闭等操作。C++通过fstream、ifstream和ofstream类提供更面向对象的文件操作方式。文件操作中经常需要检查状态或移动文件指针。文件操作中应始终检查操作是否成功。
2025-06-17 21:58:00
795
原创 M - 中位数
对于 100%100% 的数据,1≤N≤1000001≤N≤100000,0≤Ai≤1090≤Ai≤109。共 ⌊N+12⌋⌊2N+1⌋ 行,第 ii 行为 A1…2i−1 的中位数。给定一个长度为 NN 的非负整数序列 AA,对于前奇数项求中位数。对于 40%40% 的数据,N≤3000N≤3000;对于 20%20% 的数据,N≤100N≤100;第二行 NN 个正整数 A1…第一行一个正整数 NN。
2025-06-13 21:45:17
380
原创 E - 校门外的树(增强版)
校门外马路上本来从编号 0 到 L,每一编号的位置都有一棵树。,含 A 和 B);幸运的是还有植树者每次从编号 C 到 D 中凡是空穴(树被砍且还没种上树苗或树苗又被砍掉)的地方都补种上树苗(记。第一行,两个正整数 L和 N,表示校园外原来有 L+1 棵树,并有 N次砍树或种树的操作。植树者种上又被砍掉的树苗有多少棵?对于 100%100% 的数据,1≤L≤10000,1≤N≤100。第一行校门外留下的树苗数目,第二行种上又被拔掉的树苗数目。以下 N 行,每行三个整数,表示砍树或植树的标记和范围。
2025-06-12 22:48:20
270
原创 6.10
对于多米诺骨牌的放置,将其分数定义为所有未被任何多米诺骨牌覆盖的单元格中写入的整数的按位异或。这题就是找多少个数(pan)之后开始重复,区间数大于他时就是这个数,小于他是就是他的区间数。所以i*d是d和p的最小公倍数(这样i才最小)=d*p/(d,p的最大公因数)这题就是深搜的题目,把每种情况讨论一下,最后得出最小值的结果。这题我就是先讨论情况,再得出最后的规律,它的规律是。单元格 (i,j) (1≤i≤H,1≤j≤W)(当(x+i*d)%p=p时,i*d%p==0;则i=p/(d,p的最大公因数);
2025-06-10 22:57:39
632
原创 Citation引证/Equilateral Triangle等边三角形/ 字符串旋转/F.小红的区间修改(二)
他这个只能左移一个单位,所以他字典序最小就是当出现第一个a[i]>a[i+1]时移动直到a[i]<a[i+j];然后它成三角形的三个点就是i+0*l/3 i+1*l/3 i+2*l/3 的乘积和就是它的答案。这题就是将数从大到小排序之后,就可以发现满足条件的数就是i<a[i],然后倒序遍历找出第一个符合条件的结束。这题有等边三角型的前提是l是3的倍数,这样才能在均分圆时有60度的可能。我一看到这题就想到了线段树,但要注意它那个a[i]的标记问题。这样在查找时可以方便判断。
2025-06-09 09:51:17
397
原创 斐波那契数列------矩阵幂法
方法时间复杂度空间复杂度适用场景递归法O(2^n)O(n)教学演示(实际避免使用)记忆化递归O(n)O(n)需要递归且避免重复计算迭代法O(n)O(1)最常用,平衡效率与简洁矩阵幂法O(log n)O(1)超大规模 n(如 n > 10^6)通项公式法O(1)O(1)小规模 n(浮点精度限制)生成器法O(n)O(1)需要按需生成整个序列。
2025-06-05 23:51:30
1360
原创 基础线性代数
场景推荐方法MODMOD 是质数标准高斯消元(模逆元)MODMOD 是任意整数辗转相消法矩阵很小(n≤10n≤10)Laplace 展开MODMOD 是合数且易分解CRT + 高斯消元需要理论保证或稀疏矩阵随机化算法。
2025-06-05 23:13:36
1149
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人