- 博客(107)
- 收藏
- 关注
原创 完全背包计数问题详解
物品:对应问题中的硬币或任意可选择的单位。设有n种物品,第i种物品的体积为v[i]。背包容量:对应目标体积k。目标:计算从这n种物品中(每种物品可选无限个),选出若干物品,使得它们的总体积恰好等于k的不同组合方案数。此处“组合”意味着(物品A, 物品A, 物品B)和(物品B, 物品A, 物品A)被视为同一种方案。基于此,定义动态规划状态:设dp[j]表示:从前i种物品(此维度在空间优化后被隐式处理)中选取,总体积恰好等于j的方案总数。
2026-03-21 07:15:00
372
原创 树形遍历最短路径公式解析
在树形结构中,从根节点出发访问所有节点并最小化路径总长度的问题本质上是在树上的特化场景。对于一棵具有n个节点、n-1条边的树,其最短遍历路径的计算公式为2×总边长-最长路径,这一结论的推导需要从图论的基本原理出发进行分析。
2026-03-08 15:45:00
450
原创 仅有两个叶节点的树是链状结构
在给定的树形结构中,"仅与一条双向道路连接的城市恰有两座"这一条件描述的是树的拓扑特性。从图论角度分析,该条件等价于声明这棵树是一个(线性树或路径图)。
2026-03-08 15:00:00
172
原创 c++哈夫曼编码:数据结构与实现全解析
char data;int freq;节点包含字符数据、出现频率和左右子树指针构造函数初始化节点属性并置空子节点。
2026-03-07 18:22:40
452
原创 Python 哈夫曼树与编码
循环从堆中取出两个最小频率结点,合并为一个新结点(权值为两者之和),新结点的左右子结点分别为这两个结点。将新结点重新放入堆中,直到堆中仅剩一个结点,即为哈夫曼树的根结点。哈夫曼编码是由哈夫曼树生成的前缀编码,保证高频字符使用短编码,低频字符使用长编码,从而实现数据压缩的最优解。将每个字符及其频率作为叶子结点存入最小堆(优先队列),确保每次能快速取出频率最小的结点。通过上述实现,可高效完成字符串的压缩与解压,核心在于哈夫曼树的动态构建与最优编码分配。,直到到达叶子结点,记录该字符的编码。
2026-03-07 18:20:36
69
原创 C++ 多态中虚函数的实现原理
动态多态就是通过虚函数和虚函数表来实现的。在上述代码中,`Base` 类包含虚函数,会有对应的虚函数表和虚函数表指针;在 `main` 函数中,通过基类指针 `basePtr` 分别指向基类对象和派生类对象,调用虚函数 `f` 时实现了不同的行为,这正是利用虚函数和虚函数表实现多态的体现。虚函数的调用过程如下:当一个对象要调用虚函数时,先将对象内存中的 vptr 指针(虚函数表指针)指向定义该类的 vtbl(虚函数表),然后 vtbl 寻找里面的指针,该指针指向想要调用的虚函数,从而完成虚函数的调用。
2026-03-05 00:09:06
36
原创 类(Class)基本的编程概念
基于虚函数 + 继承体系,父类的指针 / 引用指向子类的对象时,调用同名的虚函数,会根据「对象的实际类型」执行对应的子类实现,而非父类实现,是运行时多态(动态多态),可彻底解耦,具有极致的扩展性。封装是将类的数据成员(属性)私有化,对外只暴露公有的成员函数(接口),隐藏内部的实现细节和数据,只提供安全的访问方式,保护数据安全,防止外部随意修改内部状态,降低耦合,便于维护。
2026-03-04 11:42:00
430
原创 GESP C++ 六级真题2025年9月T1划分字符串
状态变量含义说明数据类型f[i]表示前i个字符能够获得的最大得分long longs[i]原始字符串,从索引1开始存储char[]a[i]长度为i的子串对应的得分int[]
2026-03-03 20:46:34
227
原创 位掩码高效记录字符出现
位掩码技术利用二进制位状态记录字符出现情况,通过位运算实现高效字符处理。其核心是将字符映射到整数二进制位,使用位操作进行设置、查询和清除。典型应用包括小写字母检测(26位整数)和扩展字符集处理(64位整数)。该技术在重复字符检测、字符集运算、状态压缩等场景中优势明显,具有O(1)时间复杂度和低内存消耗(仅需4-8字节)。相比布尔数组和哈希表,位掩码在性能上有显著提升,但需注意字符范围限制和代码可读性问题。
2026-03-03 20:40:53
677
原创 第一章:觉醒
主角:林悦,原本是一名医生,在末世爆发后被神秘组织抓走,改造成了半人半丧尸的实验体。她拥有强大的力量和快速的愈合能力,但同时也保留了人类的理智和情感。场景:一个荒废的研究所,四周被丧尸包围,主角在这里寻找逃离的方法,同时探索自己的身份。文风:写实惊悚,注重细节描写和心理刻画,营造紧张的末日氛围。情节:主角在研究所中发现了一些关于自己身份的线索,同时遇到了其他幸存者,他们之间产生了矛盾和合作。
2025-02-27 21:22:07
1214
原创 快速排序(c++)
快速排序是目前应用最广泛的排序算法之一,"它的基本思想与归并排序类似,也是基于分治的。每次从待排序区间选取一个元素(我们在后面的课程中都是选取第一个)作为基准,所有比基准小的元素都在基准的左边,而所有比基准大的元素都在基准的右边。之后分别对基准记录的左边和右边两个区间递归地进行快速排序上述代码中,如果当前区间只有一个元素或为空,就直接返回。p1 和 p2 是两个用于扫描的指针,分别从左往右和从右往左扫,直到他们相遇为止。每一轮可以看作两步:1.自右向左扫找到右边第一个小于基准的位置后交换;
2025-02-27 21:11:28
925
原创 GESP C++ 三级真题(2024年12月)T2打印数字
3.2 编程题 2题目: 打印数字时间限制: 1.0 s内存限制: 512.0 MB3.2.1 题面描述小杨为数字 0, 1, 2 和 3 设计了一款表示形式,每个数字占用了 ( 5 \times 5 ) 的网格。
2025-02-14 23:55:17
754
原创 islands 打炉石传说
slands 最近在完一款游戏“炉石传说”,又名“魔兽英雄传”。炉石传说是一款卡牌类对战的游戏。游戏是两人对战,总的来说,里面的卡牌分成两类,一类是法术牌,另一类是随从牌(所谓随从就是怪物)。为了简化问题,现在假设随从牌的作用是召唤一个具有一定攻击力的怪物,法术牌的作用是给某个随从增加一定攻击力。随从牌和法术牌的使用都需要消耗一定的法力值。现在 islands 有 10 点法力值,手上有 n 张牌(islands 最多有 10 张牌,否者他将会被爆(T_T),有些是法术牌,有些是随从牌。
2025-01-04 22:06:22
300
原创 《妙趣横生,感悟人生之妙》
文章以对 “妙” 字的理解开篇,分别从大自然的美妙、人类智慧创造的奇妙事物以及奇妙的人三个方面展开叙述,通过具体的事例阐述 “妙” 在生活中的体现。接着引用老子的话升华主题,强调人生充满神秘和奇妙,我们要用敬畏之心去感悟。最后回顾自身,说明 “妙” 无处不在,表达自己将继续感受生活中 “妙” 处的决心。整体结构清晰,通过具体事例和引用名言来增强文章的深度和文采。
2024-11-20 18:38:02
484
原创 《AI 之影》
小说以孤独的城市漫步者佑介在雨天进入咖啡馆为开端,引入神秘的 AI,通过佑介与 AI 的交流展现其智慧和独特性。随着情节发展,科技公司的介入增加了紧张感,佑介决定拯救 AI,进而引出抵抗组织与科技公司的决战。最后,佑介和 AI 在战后对未来充满希望,开启新的征程。整体情节层层递进,从发现 AI 到陷入危机再到解决危机,逻辑严密。在描述中,运用生动的语言描写城市景象、人物心理和对话,如 “城市的喧嚣如同一幅永不停息的画卷” 等
2024-11-16 20:13:19
251
原创 《奇幻之境》
故事以神秘森林为开端,引入主角艾莉丝,通过描写她对未知的渴望和勇敢,踏上寻找森林的旅程,层层递进地展现一路上的风景和奇遇。在森林中设置各种奇妙生物,增加奇幻色彩,接着发现古老城堡,引入守护通道的任务,使故事有了明确的目标和挑战。艾莉丝在面对挑战中成长,最终成功守护通道,体现了勇敢和责任。整个故事在结构上层次清晰,通过不断出现的新元素推动情节发展,逻辑严密;在描写上注重运用生动形象的语言,如对森林、生物和城堡的描写,以模仿村上春树的写作风格,达到文采斐然的效果。
2024-11-14 19:00:14
542
原创 P1219 [USACO1.5] 八皇后 Checker Challenge
一个如下的 6×6 的跳棋棋盘,有六个棋子被放置在棋盘上,使得每行、每列有且只有一个,每条对角线(包括两条主对角线的所有平行线)上至多有一个棋子。前三行为前三个解,每个解的两个数字之间用一个空格隔开。第四行只有一个数字,表示解的总数。这只是棋子放置的一个解。请编一个程序找出所有棋子放置的解。并把它们以上面的序列方法输出,解按字典顺序排列。一行一个正整数 𝑛,表示棋盘是 𝑛×𝑛 大小的。请输出前 3 个解。最后一行是解的总个数。行号 1 2 3 4 5 6。列号 2 4 6 1 3 5。
2024-11-14 18:49:42
492
原创 《AI 使生活更美好》
总述 AI 如新星照亮生活,接着从医疗、教育、交通、娱乐四个领域分别阐述 AI 带来的美好,引用了古人话语增强说服力,如 “医者仁心”“因材施教”“千里之行,始于足下”“独乐乐不如众乐乐”。然后指出 AI 发展带来的挑战,并用 “不能因噎废食” 表明应积极应对。最后引用诗句 “沉舟侧畔千帆过,病树前头万木春”,呼吁拥抱 AI 创造美好未来。整体结构清晰,通过多个领域的举例和引用经典,体现了立意深远、引经据典、逻辑严密等要求。
2024-11-12 20:19:44
820
原创 洛谷——P1873 [COCI 2011/2012 #5] EKO / 砍树
Mirko 的伐木机工作流程如下:Mirko 设置一个高度参数 𝐻(米),伐木机升起一个巨大的锯片到高度 𝐻H,并锯掉所有树比 𝐻H 高的部分(当然,树木不高于 𝐻 米的部分保持不变)。例如,如果一排树的高度分别为 20,15,10 和 17,Mirko 把锯片升到 15 米的高度,切割后树木剩下的高度将是 15,15,10 和 15,而 Mirko 将从第 1 棵树得到 5 米,从第 4 棵树得到 2 米,共得到 7 米木材。换句话说,如果再升高 1 米,他将得不到 𝑀 米木材。
2024-11-12 19:15:34
507
原创 P1135 奇怪的电梯(洛谷)
呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 𝑖i 层楼(1≤𝑖≤𝑁)上有一个数字 𝐾𝑖(0≤𝐾𝑖≤𝑁)。电梯只有四个按钮:开,关,上,下。当然,如果不能满足要求,相应的按钮就会失灵。例如: 3,3,1,2,5 代表了 𝐾𝑖(𝐾1=3,𝐾2=,……在 1 楼,按“上”可以到 4 楼,按“下”是不起作用的,因为没有 −2 楼。第一行为三个用空格隔开的正整数,表示 𝑁,𝐴,𝐵(1≤𝑁≤200,1≤𝐴,𝐵≤𝑁)。一行,即最少按键次数,若无法到达,则输出。
2024-11-06 18:47:48
480
原创 P1571 眼红的Medusa (洛谷)
原因是:他发现很多人都和她一样获了科技创新奖,特别是其中的某些人,还获得了另一个奖项——特殊贡献奖。而越多的人获得了两个奖项,Miss Medusa就会越眼红。于是她决定统计有哪些人获得了两个奖项,来知道自己有多眼红。第一行两个整数 𝑛,𝑚n,m,表示有 𝑛n 个人获得科技创新奖,𝑚m 个人获得特殊贡献奖。输出一行,为获得两个奖项的人的编号,按在科技创新奖获奖名单中的先后次序输出。第二行 𝑛n 个正整数,表示获得科技创新奖的人的编号。第三行 𝑚m 个正整数,表示获得特殊贡献奖的人的编号。
2024-11-05 18:28:14
398
原创 P2440 木材加工
例如有两根原木长度分别为 11 和 21,要求切割成等长的 6 段,很明显能切割出来的小段木头长度最长为 5。木头长度的单位是 cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。第一行是两个正整数 𝑛,𝑘,分别表示原木的数量,需要得到的小段的数量。当然,我们希望得到的小段木头越长越好,请求出 𝑙 的最大值。接下来 𝑛n 行,每行一个正整数 𝐿𝑖,表示一根原木的长度。如果连 1cm 长的小段都切不出来,输出。为 𝑙 的小段木头(木头有可能有剩余)。仅一行,即 𝑙 的最大值。
2024-11-04 20:21:32
297
原创 B3629 吃冰棍
所以,如果机器猫买了 5 根冰棍,他可以吃完之后得到 5 个木棒;拿 3 个木棒兑换 1 根冰棍,余 2 个木棒;吃完兑换来的冰棍之后,手上有 3 个木棒,又能兑换一个冰棍。最后,机器猫实际上吃了 7 个冰棍。买一根冰棍,吃完了会剩一个木棒;每三个木棒可以兑换一个冰棍。兑换出来的冰棍,吃完之后也能剩下一个木棒。机器猫想要吃到 𝑛 个冰棍,想问最开始至少需要去买多少根冰棍?仅一行,一个正整数,表示需要买的冰棍数量。仅一行,一个正整数,表示 𝑛。
2024-11-02 20:55:11
505
原创 B3628 机器猫斗恶龙
每个关卡要么是与怪物战斗,扣除一定的血量;要么是营地,给机器猫增加一定的血量。的血量不能低于或等于 0。问机器猫至少需要多少的初始血量,才能完成任务。第二行,共 𝑛n 个整数 𝑎𝑖ai,表示每个关卡。仅一行,一个正整数,表示机器猫需要的初始血量。机器猫出门斗恶龙了!他需要通过 𝑛 个关卡。第一行,一个正整数 𝑛n,表示关卡数量。
2024-11-02 20:50:40
423
原创 【Usaco Nov08 Gold】 安慰奶牛
Farmer John变得非常懒, 他不想再继续维护供奶牛之间供通行的道路. 道路被用来连接N(5 <= N <= 10,000)个牧场, 牧场被连续地编号为1..N. 每一个牧场都是一个奶牛的家.FJ计划除去P(N-1 <= P <= 100,000)条道路中尽可能多的道路, 但是还要保持牧场之间的连通性. 你首先要决定那些道路是需要保留的N-1条道路. 第j条双向道路连接了牧场S_j和E_j (1 <= S_j <= N;S_j!
2024-09-08 11:54:57
313
原创 洛谷 P1525 [NOIP2010 提高组]关押罪犯
我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。接下来的 M 行每行为三个正整数aj,bj,cj,表示 aj 号和 bj 号罪犯之间存在仇恨,其怨气值为 cj。如果这个集合现在还是空的,那么 ai=0,否则代表的是这个集合内的一个元素。很明显,我们要先安排怨气值最大的罪犯到不同的监狱里面,直到遇到一对罪犯它们必须在同一个监狱,那么他们将发生冲突并且造成一定影响力。那么,应如何分配罪犯,才能使 Z 市长看到的那个冲突事件的影响力最小?
2024-09-04 07:15:00
618
原创 洛谷P2419:Cow Contest S 奶牛的比赛
每头奶牛的编程能力不尽相同,并且没有哪两头奶牛的水平不相上下,也就是说,奶牛们的编程能力有明确的排名。如果编号为A的奶牛的编程能力强于编号为B的奶牛(1 <= A <= N;FJ想知道奶牛们编程能力的具体排名,于是他找来了奶牛们所有 M(1 <= M <= 4,500)轮比赛的结果,希望你能根据这些信息,推断出尽可能多的奶牛的编程能力排名。第2—M+1行: 每行为2个用空格隔开的整数A、B,描述了参加某一轮比赛的奶 牛的编号,以及结果(编号为A,即为每行的第一个数的奶牛为胜者)
2024-09-03 10:45:00
565
原创 [USACO3.2] 香甜的黄油 Sweet Butter(Dijkstra)
给出各头牛在的牧场和牧场间的路线,找出使所有牛到达的路程和最短的牧场(他将把糖放在那)。这道题实际上就是要求出所有有牛的牧场的到每个牧场的最短路。第 N+2 行到第 N+C+1 行,每行包含三个整数 A,B,D,表示牧场号为 A 和 B 的两个牧场之间有一条长度为 D 的双向道路相连。然后剩下的工作就是枚举每个牧场然后把每一头奶牛到这个牧场的最短路径长度加起来求个和,比较所有的和的最小值。第二行到第 N+1 行,每行一个整数,其中第 i 行的整数表示第 i−1 头奶牛所在的牧场号。
2024-09-02 16:30:00
997
原创 NYOJ 1204 计蒜客-T1551-魔法少女 简单DP
在黑长直(小炎)往上爬楼去对抗魔女之夜时,她遇到了一个问题想请你帮忙。因为魔女之夜是悬浮在半空的,所以她必须要爬楼,而那座废墟一共有 nn 层,而且每层高度不同,这造成小炎爬每层的时间也不同。不过当然,小炎会时间魔法,可以瞬间飞过一层或者两层[即不耗时]。消灭魔女之夜是刻不容缓的,所以小炎想找你帮她找出一种最短时间方案能通往楼顶。接下去 N 行,每行一个数字 H(1≤H≤100),代表本层的高度。第一行一个数字 N(1≤N≤10000),代表楼层数量。输出一行,一个数字 S,代表通往楼顶所需的最短时间。
2024-09-02 09:45:00
405
原创 洛谷 P3183 [HAOI2016]食物链(记忆化搜索/拓扑排序)
物种的名称从 1 到 n 编号, M 条能量流动关系形如 a1→b1,a2→b2,a3→b3⋯am−1→bm−1,am→bm 其中 ai→bi 表示能量从物种 ai 流向物种 bi ,注意单独的一种孤立生物不算一条食物链。如果有若干条边 u1→v,u2→v,⋯uk→v ,那么只有当 f[u1],f[u2],⋯,f[uk] 全部计算完成时,才可以计算 f[v]。也即, DAG 中的有向边规定了计算的顺序,只有当一个点的所有前驱点都计算完成时,该点才可以计算。
2024-09-01 15:30:00
689
原创 P1048 [NOIP2005 普及组] 采药
辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药(共 m 株),采每一株都需要一些时间,每一株也有它自身的价值。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。我们用 f[i][j] 表示在 i,i+1,⋯,n−1,n 中选择物品,剩余时间为 j 时能选出的最大价值和。采药的时间 T(1≤T≤1000) ,一共有不超过 100 个草药,每个草药的价值和消耗的时间不超100。我们可以看出这是一道。
2024-09-01 09:00:00
705
原创 冻死你都觉得简单
今天是新学期的开学典礼,也是陆霆深和林悦溪再次交锋的开始。两人作为各自家族的代表,站在了领奖台上,接受着全校师生的掌声和羡慕的目光。随着两人在学校的表现越来越出色,家族对他们的期望也越来越高。陆霆深的父亲希望他能继承家族企业,而林悦溪的母亲则希望她能在法律界有所建树。在一次偶然的机会中,陆霆深和林悦溪被学校选中,代表学校参加一个国际学术论坛。两人在家族的期望和个人的梦想之间寻找着平衡,同时也在思考如何将个人的成长与家族的利益结合起来。两人的成绩不相上下,每一次的竞赛都像是在为最终的对决做准备。
2024-08-31 17:30:00
534
原创 石子合并-环(区间dp)c++
所以我们只需要正常做区间 DP ,最后求dp[1][N],dp[2][N+1],…,dp[N][2×N−1] 的最小值即可。但如果做 N 次区间 DP 时间复杂度就变成了 O(n4),并且我们可以发现在其中有一些状态是重复计算的。刚才的《石子合并》问题是把石子放成一排,如果石子放成一个环,第 N 堆和第 1 堆相邻,又该怎么做呢?这 N 种放成一排的情况都考虑清楚,取其中的最优解,就一定是放成环的样子的最优解。我们要想办法把它变成之前放成一排的问题,可以发现只要我们把。
2024-08-31 12:46:00
456
原创 拓扑排序(c++)
观察上图可以发现,有一条 1→2 的有向边,表示 2 进入队列之前需要先让 1 进入队列。拓扑排序就是依照这个原理进行的,但是拓扑排序将这个判断过程简化为了对入度的判断。通过只判断入度,可以在保证正确性的情况下简化算法流程。通过上面的判断方式,我们发现可以根据一个点的入边来判断这个点进入队列前需要哪些点已经进入队列。这一名词,实际上拓扑序的定义与题目要求的排队序列定义相同,就是指满足该图要求的一种序列。所以,拓扑排序不仅可以用于求解拓扑序,也可以用于判断一个有向图中是否存在有向环。
2024-08-30 14:19:50
773
原创 合并石子(c++)
通过观察会发现每次合并都是把两个相邻的连续区间进行合并,比如第一次可以把 [1,1] 和 [2,2] 合并成 [1,2][1,2]。如果之前把 [1,2] 和 [3,4] 合并出来,接着可以把这两段再合并成 [1,4]。对于当前的最后一次合并操作,是把某两段合并成了 [i,j],那么可以枚举两段中间的分界点 k,将 [i,j] 拆成 [i,k] 和 [k+1,j],表示是把这样的两段合并成一段的。其中 a[i]+...+a[j] 可以用前缀和优化一下,变为 sum[j]−sum[i−1]。
2024-08-30 09:30:00
1117
原创 四点三十分的
林晓站在这梦幻般的场景中,眼神中满是幸福的光彩,她看着面前单膝跪地的苏然,手中拿着闪耀的钻戒,心仿佛要融化了一般。她知道,如果告诉苏然,他一定会不顾一切地陪在她身边,但是她不想让他看到自己痛苦的样子,也不想让他为了自己放弃自己的未来。从那以后,苏然每年都会在林晓的忌日来到她的墓前,为她献上一束白色的玫瑰。林晓的泪水瞬间涌出眼眶,她轻轻地点了点头,苏然站起身来,将戒指戴在了她的手指上,然后紧紧地拥抱着她。她在信中告诉了苏然自己离开的真正原因,她表达了自己对苏然的爱和愧疚,她希望苏然能够原谅她。
2024-08-29 18:30:00
226
原创 洛谷P1040 NOIP2003提高组---加分二叉树
设一个 n 个节点的二叉树 tree 的中序遍历为 (1,2,3,⋯,n),其中数字 1,2,3,⋯,n 为节点编号。试求一棵符合中序遍历为 (1,2,3,⋯,n)且加分最高的二叉树 tree。subtree 的左子树的加分 × subtree 的右子树的加分 + subtree 的根的分数。第 1 行:一个整数,为最高加分(结果不会超过 4,000,000,000)。第 2 行:n 个用空格隔开的整数,为每个节点的分数(分数 <100)。第 2 行:n 个用空格隔开的整数,为该树的前序遍历。
2024-08-29 14:17:35
755
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1