- 博客(17)
- 收藏
- 关注
原创 动态规划...
动态规划是一种通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。由于动态规划并不是某种具体的算法,而是一种解决特定问题的方法,因此它会出现在各式各样的数据结构中,与之相关的题目种类也更为繁杂。解决动态规划问题,通常由两个步骤:01 背包问题描述:有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。在上述问题中,每一个物品都有两种状态,选与不选。对于这种选择
2024-10-25 21:08:57
1232
1
原创 折半搜素(meet in the middle)
折半搜素通常用来处理数据规模不能直接通过暴力解决,但数据规模又没有特别大的情况。例如:[P10484 送礼物](P10484 送礼物 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)题意:作为惩罚,GY 被遣送去帮助某神牛给女生送礼物 (GY:貌似是个好差事)但是在 GY 看到礼物之后,他就不这么认为了。某神牛有NNN个礼物,且异常沉重,但是 GY 的力气也异常的大 (-_-b),他一次可以搬动重量和在www以下的任意多个物品。
2024-08-26 22:59:48
764
原创 pta 完美树
对于剩下的子节点,设子节点数为k,问题转化为取出k/2+1个dp[v][0]和k/2个dp[v][1],使其代价和最小,转移到dp[u][0],同理,dp[u][1]转化为取出k/2+1个dp[v][1]和k/2个dp[v][0],使其代价和最小。
2024-05-07 13:42:52
502
1
原创 pta 超能力者大赛(测试点8,测试点9)
一道模拟题,想要ac的话还是挺麻烦的。简单说一下我的思路,不断用找下一个对手所在的城市,如果不能到达该城市或找不到符合条件的对手,判断输赢,否则,前往该城市。到达该城市后,判断能不能在时间结束前干掉对手,如果不行,输出Game over,否则,干掉对手,更新联盟,然后判断能不能待到第二天,如果可以(当且仅当当前城市还有人),干掉剩余人,在重新找对手,否则,直接重新找对手,且下次对手不能为当前城市。我的代码从day0开始的,所以如果开局就胜利或输,应该令day++;同时这也是测试点8考察的点。
2024-05-07 13:23:29
745
3
原创 Codeforces Round 943 (Div. 3)
在主对角线上放置 𝑛−2 个单元格。然后在 (𝑛−1,𝑛) 和(𝑛,𝑛) 处放置两个单元格,通过这种方法,我们可以生成所有可能的曼哈顿距离。奇数距离产生于主对角线上的单元格和 (𝑛−1,𝑛) 之间。偶数距离产生于主对角线上的单元格与 (𝑛,𝑛) 之间。C题:a1取大点,直接加就行,不会超出题目范围,当时没看出来,所以我用不等式控制了一下大小。对于每名选手的最大可能获得分数,我们只要要在min(n,k)回合中找即可(证明略)。F题貌似是异或前缀和加二分,没做。B题:双指针遍历即可。
2024-05-04 04:02:53
338
原创 2021 Xinjiang Provincial Collegiate Programming Contest
思路:分三种情况,l=r分组排序;n >= 2 * n,全排列;n < 2 * n 两段排列,中间不排。思路:小球多次碰撞后彼此相对位置不变,还有末尾不能多空格。签到题,dp[i] 表示以数字 i 结尾的链的最小值。思路:考虑二分查找,注意对正负分类讨论。贪心,找价格最大的连续递减序列,模拟。签到题,按题目意思模拟即可。思路:签到题,找规律。
2024-05-01 22:05:31
84
原创 欧拉函数及其扩展
欧拉定理可用于求大数的模,求解线性同余方程等。此外,欧拉定理的扩展可以用来实现降幂。欧拉函数定义为不超过n且与n互素的正整数的个数。此外,由于欧拉函数为积性函数,所以可以用欧拉筛在。,其中m是一个正整数,a为整数,且a与m互素。此外,更快的方式为杜教筛,时间复杂度为。利用欧拉函数我们可以推导出欧拉定理,即。例题:仪仗队(洛谷 P2158)
2024-04-18 17:49:59
362
1
原创 L2-008 最长对称子串 (manacher算法)
manacher 算法是一个求最长回文串字串的一个优秀算法。算法的设计如下:我们定义数组P[],其中P[i]是以字符s[i]为中心字符的最长回文串的长度。设现在已经计算出P[0]~P[i -1],下一步继续计算P[i],令R为P[0]~P[i -1]这些回文串中最大的右端点,C为这个R对应的回文子串的中心点。下面计算P[i],假设j为i关于C的镜像点。若i>=R,则i右侧的字符串都没有检查过,暴力中心扩展即可。若i
2024-03-21 15:48:49
333
1
原创 L2-007 家庭房产(并查集 + 结构体排序)
考察的是并查集和结构体排序,再读入数据的时候按照编号大小,将编号小的树合并到编号大的树上,然后遍历所有数据,将家庭一样的结构体放在一起(放在a数组里),并跟新家庭的属性信息,最后排序输出。
2024-03-21 12:34:26
273
1
原创 L2-006 树的遍历 (建树)
我们都知道,一颗二叉树,给定中序序列和任意其它序列,可以建造出整颗二叉树。树的建造有两种方式,一种是静态,一种是动态。这中按完全二叉树建树的方式很费空间,最好不要按这种方式设置左右子树,但是这道题数据范围小,可以用。
2024-03-20 18:07:54
203
1
原创 L2-005 集合相似度
用binary_search()来查找一个元素是否存在。(两者时间复杂度貌似都是nlog(n))题目很简单,没有什么坑,就是实现去重和查找这两个操作而已。可以用set,但是我用的是vector。在vector容器中,可以用。
2024-03-20 10:31:26
166
1
原创 L2-004 这是二叉搜索树吗? (含测试点七解析)
例如:8 6 5 7 10 8 11,我们第一次划分可知根节点为 8 ,左子树的先序序列为 6 5 7,右子树的先序序列为 10 8 11,也就是说,如果当前序列是否为一颗二叉搜索树或其镜像的前序遍历,那么那。了,那么会有一个测试点 7过不去(卡了我好久......),所谓不能混合判断就是:如果你确定这棵树不是镜像,就一直按照不是镜像来判断,不能一会按不是镜像来判断,一会按是镜像来判断。输出后序遍历,比较简单,用一个栈在递归或搜索时不断存入根结点,最后利用栈的特点,输出即可。如果你将二叉树和二叉树的镜像。
2024-03-19 20:20:33
755
原创 L2-001 城市间紧急救援(Dijkstra + 打印路径 + 记录最短路条数)
可以使用Dijkstra算法,即bfs + 贪心,由题目没有给出M的范围,所以我们无法判断图是稠密图还是稀疏图来决定是否使用优先队列来取得更好的时间复杂度,我采用的是优先队列。,当我们找到了一条更短的路径时,令 dp[j] = dp[i]。如果没有找到了一个与当前最短路长度相同的路径,令 dp[j] += dp[i]。最短路上结点的上一个结点,来辅助我们打印最短路径。这道题目考察的点很多,首先我们要。
2024-03-19 12:26:46
872
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人