- 博客(106)
- 收藏
- 关注
原创 U587038 背包 题解
本文提出了一种解决树上01背包问题的优化方法。题解分为70分和100分两种解法:70分解法采用标准树上01背包DP,时间复杂度为O(nL);100分解法则通过预处理前√n个节点的DP值,对剩余节点采用DFS暴力枚举,结合预处理的DP值进行优化,有效降低了时间复杂度。关键优化点在于识别高频访问节点并预处理,从而在查询时快速获取部分结果,再通过DFS处理剩余部分,最终在O(Q√n)时间内完成所有查询。
2025-10-14 17:11:09
44
原创 U585371 gcd之和 题解
文章摘要:该题解提供了两种解法,30分暴力解法直接枚举区间内所有数对计算GCD,而100分解法则通过预处理所有可能的f(x)值(约100种),利用前缀和数组优化计算。100分代码通过预处理GCD表和前缀和数组,将时间复杂度从O(Q*N^2)优化到更高效的形式,适用于大规模数据。
2025-08-07 09:50:17
36
原创 U567760 序列和 题解
本文介绍了解决"严格上升子序列最大和"问题的四种方法:20分暴力DFS(O(2^n))、40分DP(O(n^2))、70分树状数组优化(O(n log m))和100分离散化+树状数组(O(n log n))。核心思路是动态规划,通过逐步优化从暴力到高效算法,最终使用离散化处理大数据范围,实现了时间和空间复杂度的最优解。代码展示了各阶段的实现方法,重点在于状态转移和数据结构优化。
2025-08-07 09:31:12
532
1
原创 python/c++ Leetcode题解——292. Nim 游戏
让我们考虑一些小例子。显而易见的是,如果石头堆中只有一块、两块、或是三块石头,那么在你的回合,你就可以把全部石子拿走,从而在游戏中取胜;如果堆中恰好有四块石头,你就会失败。因为在这种情况下不管你取走多少石头,总会为你的对手留下几块,他可以将剩余的石头全部取完,从而他可以在游戏中打败你。因此,要想获胜,在你的回合中,必须避免石头堆中的石子数为 4 的情况。我们继续推理,假设当前堆里只剩下五块、六块、或是七块石头,你可以控制自己拿取的石头数,总是恰好给你的对手留下四块石头,使他输掉这场比赛。
2024-02-04 14:20:46
389
1
原创 python/c++ Leetcode题解——118. 杨辉三角
杨辉三角,是二项式系数在三角形中的一种几何排列。它是中国古代数学的杰出研究成果之一,它把二项式系数图形化,把组合数内在的一些代数性质直观地从图形中体现出来,是一种离散型的数与形的结合。杨辉三角具有以下性质:1.每行数字左右对称,由 1 开始逐渐变大再变小,并最终回到 1。2.第 n 行(从 0 开始编号)的数字有 n+1 项,前 n 行共有个数。3.第 n 行的第 m 个数(从 0 开始编号)可表示为可以被表示为组合数,记作或,即为从 n 个不同元素中取 \m 个元素的组合数。
2024-01-17 19:51:22
431
2
原创 python/c++ Leetcode题解——2744. 最大字符串配对数目
我们可以直接使用二重循环,枚举给定的数组 words 中的 words[i] 和 words[j] 是否可以匹配。由于题目规定了数组 words 中包含的字符串互不相同,因此在枚举时,只要保证 i
2024-01-17 19:40:50
398
1
原创 python/c++ Leetcode题解——20. 有效的括号
如果不是相同的类型,或者栈中并没有左括号,那么字符串 s 无效,返回 false。栈中的字符数量为 O(n),而哈希表使用的空间为 O(∣Σ∣),相加即可得到总空间复杂度。我们遍历给定的字符串 s。当我们遇到一个左括号时,我们会期望在后续的遍历中,有一个相同类型的右括号将其闭合。注意到有效字符串的长度一定为偶数,因此如果字符串的长度为奇数,我们可以直接返回 false,省去后续的遍历判断过程。在遍历结束后,如果栈中没有左括号,说明我们将字符串 s 中的所有左括号闭合,返回 true,否则返回 false。
2024-01-16 18:43:58
135
原创 python/c++ Leetcode题解——746. 使用最小花费爬楼梯
假设数组 cost 的长度为 n,则 n 个阶梯分别对应下标 0 到 n−1,楼层顶部对应下标 n,问题等价于计算达到下标 n 的最小花费。可以通过动态规划求解。创建长度为 n+1 的数组 dp,其中 dp[i] 表示达到下标 i 的最小花费。由于可以选择下标 0 或 1 作为初始阶梯,因此有 dp[0] = dp[1] = 0.当 2 ≤ i ≤。
2023-12-17 12:10:02
317
原创 python/c++ Leetcode题解——1.两数之和
最容易想到的方法是枚举数组中的每一个数 x,寻找数组中是否存在 target - x。当我们使用遍历整个数组的方式寻找 target - x 时,需要注意到每一个位于 x 之前的元素都已经和 x 匹配过,因此不需要再进行匹配。而每一个元素不能被使用两次,所以我们只需要在 x 后面的元素中寻找 target - x。
2023-12-17 11:38:06
160
原创 P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题
【代码】P1029 [NOIP2001 普及组] 最大公约数和最小公倍数问题。
2023-11-12 20:32:17
124
原创 windows/mac/linux 用C++搭建一个刷题模拟器
欢迎大家提供新题目(请把题目文件夹压缩成zip后发给我chengyixuan130812@163.com),我会定期更新的。
2023-10-25 17:37:49
639
C++重构vector
2023-05-04
C++ 本地网盘模拟器1.0.0(可体验)
2023-02-19
C++重构string(.h部分)v1.0.0
2022-12-21
C++重构string(.cpp部分)v1.0.0
2022-12-21
mac/linux C++ 控制台工具
2023-09-22
C++重构vector
2023-06-28
chatgpt应用.docx
2023-06-22
数据范围太大了,怎么做(C++)
2024-04-14
关于#c++#的问题,请各位专家解答!
2023-03-07
帮我看看C++竞赛题
2022-12-25
Windows怎么改变字体颜色
2022-12-26
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅