CSP考试重点复习 C++
文章平均质量分 62
CSP考试重点复习
一起摸摸鱼
互关互关互关互关互关互关互关互关互关互关互关互关互关互关互关互关互关互关互关
展开
-
12.4 同余问题
12.4 同余问题原创 2022-10-30 19:51:43 · 579 阅读 · 2 评论 -
12.3 解不定方程 ax+by=c*12.4 同余问题*
12.3 解不定方程 ax+by=c!*原创 2022-09-14 17:23:04 · 431 阅读 · 0 评论 -
第十二单元 数论算法12.1 同余的性质12.2 最大公约数、最小公倍数
第十二单元 数论算法12.1 同余的性质12.2 最大公约数、最小公倍数原创 2022-09-08 20:24:41 · 652 阅读 · 0 评论 -
11.10 解线性方程组*
11.10 解线性方程组*原创 2022-09-03 12:46:08 · 251 阅读 · 0 评论 -
11.9 表达式求值
11.9 表达式求值原创 2022-09-03 12:43:22 · 509 阅读 · 0 评论 -
11.8 快速幂
11.8 快速幂原创 2022-08-23 17:13:03 · 117 阅读 · 2 评论 -
11.6 进制转换(正整数)11.7 高精度算法(压位存储)
11.6 进制转换(正整数)11.7 高精度算法(压位存储)原创 2022-08-21 20:49:53 · 184 阅读 · 3 评论 -
11.4 排列和组合的产生(有重集元素) 对不起大家WWW我死了一段时间
11.4 排列和组合的产生(有重集元素) 对不起大家WWW我死了一段时间原创 2022-08-16 19:35:02 · 378 阅读 · 5 评论 -
上海市青少年算法竞赛2022年7月乙组解析
上海市青少年算法竞赛2022年7月乙组解析原创 2022-07-25 13:13:50 · 543 阅读 · 2 评论 -
11.3 排列和组合的产生(无重集元素)
11.3 排列和组合的产生(无重集元素)(1) 全排列(2) 一般组合(3) 全组合(4) 由上一排列产生下一排列(5) 由上一组合产生下一组合原创 2022-07-18 21:01:59 · 150 阅读 · 2 评论 -
C++11.2 组合数的计算11.3 排列和组合的产生(无重集元素)
11.2 组合数的计算!(1) 使用加法递推——O(n^2)(2) 使用乘法递推——O(n)11.3 排列和组合的产生(无重集元素)!(1) 全排列(2) 一般组合(3) 全组合(4) 由上一排列产生下一排列(5) 由上一组合产生下一组合...原创 2022-07-12 20:48:13 · 369 阅读 · 1 评论 -
C++第十一单元 数学基础11.1 组合数学
有 高中数学知识C++第十一单元 数学基础11.1 组合数学(1) 加法定理与乘法原理(2) 排列与组合(3) 鸽巢原理(抽屉原理)(4) 容斥原理原创 2022-07-11 18:31:44 · 314 阅读 · 0 评论 -
C++10.7 哈希(Hash)表
10.7 哈希(Hash)表(1) 实现(2) 散列函数(3) 开散列方法(4) 闭散列方法(开地址方法)(5) 删除*原创 2022-07-10 10:52:19 · 745 阅读 · 0 评论 -
10.6 哈夫曼(Huffman)树(1) 建立哈夫曼树(2) 哈夫曼编码
10.6 哈夫曼(Huffman)树(1) 建立哈夫曼树(2) 哈夫曼编码原创 2022-07-07 17:22:25 · 387 阅读 · 4 评论 -
C++10.5 堆和优先队列*
10.5 堆和优先队列*(1) 堆(2) 插入一个元素(3) 插入一组元素(4) 删除一个元素*原创 2022-07-06 13:53:15 · 324 阅读 · 1 评论 -
C++10.3 查找第 k 小元素10.4 二叉排序树①
10.3 查找第 k 小元素10.4 二叉排序树①原创 2022-07-05 16:05:42 · 391 阅读 · 0 评论 -
C++第十单元 查找与检索10.1 顺序查找10.2 二分查找
C++第十单元 查找与检索10.1 顺序查找10.2 二分查找原创 2022-07-05 15:42:57 · 290 阅读 · 0 评论 -
9.7 小结
9.7 小结原创 2022-07-04 16:56:55 · 164 阅读 · 1 评论 -
9.6 并查集
9.6 并查集!原创 2022-07-04 15:45:50 · 168 阅读 · 5 评论 -
9.5 二叉树C++
9.5 二叉树C++详解原创 2022-07-03 20:31:06 · 259 阅读 · 1 评论 -
9.4 队列C++
9.4 队列C++原创 2022-07-03 20:20:51 · 175 阅读 · 0 评论 -
9.3 栈
9.3 栈原创 2022-07-02 16:43:20 · 122 阅读 · 0 评论 -
第九单元 基本数据结构9.1 线性表(顺序结构)9.2 线性表(链式结构)
第九单元 基本数据结构9.1 线性表(顺序结构)9.2 线性表(链式结构)原创 2022-07-02 11:09:59 · 122 阅读 · 0 评论 -
8.4 使用二叉树的排序算法*8.5 小结
8.4 使用二叉树的排序算法*8.5 小结原创 2022-07-02 11:02:14 · 145 阅读 · 0 评论 -
8.2 简单排序算法 (1) 插入排序 (2) 选择排序 (3) 冒泡排序 8.3 线性时间排序(1) 桶排序 (2) 计数排序 (3) 基数排序*(附代码)
8.2 简单排序算法(附代码) (1) 插入排序! (2) 选择排序! (3) 冒泡排序!8.3 线性时间排序(附代码) (1) 桶排序! (2) 计数排序 (3) 基数排序*原创 2022-07-01 09:30:09 · 143 阅读 · 0 评论 -
第八单元 排序算法8.1 常用排序算法
第八单元 排序算法 8.1 常用排序算法 (1) 使用 STL 算法!(2) 快速排序!(3) 归并排序原创 2022-06-29 14:55:29 · 131 阅读 · 0 评论 -
7.12 子集和问题和后期预告
7.12 子集和问题和后期预告原创 2022-06-29 14:46:54 · 423 阅读 · 0 评论 -
7.9 混合背包问题7.10 特殊要求7.11 背包问题的搜索解法
7.9 混合背包问题7.10 特殊要求7.11 背包问题的搜索解法原创 2022-06-26 15:39:20 · 178 阅读 · 0 评论 -
7.6 分组的背包问题7.7 有依赖的背包问题7.8 泛化物品
7.6 分组的背包问题7.7 有依赖的背包问题7.8 泛化物品原创 2022-06-26 15:29:07 · 272 阅读 · 0 评论 -
7.5 二维费用的背包问题
【问题描述】有 n 件物品和一个容量为 C、容积为 U 的背包。第 i 件物品的重量是 w[i],体积是 u[i],价值是 v[i]。求解将哪些物品装入背包可使价值总和最大。(1) 0/1 背包的表示方法费用加了一维,只需把状态也加一维。1. 状态表示:设 f[i][c][u]为前 i 件物品付出两种代价分别为 c 和 u 时可以获得的最大价值。2. 状态转移方程:当然,为了节省空间,可以把 i 去掉。3. 一个启示:当发现由熟悉的动态规划题目变形而来的题目时,在原来的状态中加一维以满..原创 2021-11-28 17:10:58 · 400 阅读 · 0 评论 -
7.3 完全背包问题7.4 多重背包问题
7.3 完全背包问题【问题描述】有 n 种物品和一个容量为 C 的背包。第 i 种物品的重量是 w[i],价值是 v[i],数量无限。求解将哪些物品装入背包可使价值总和最大。(1) 基本算法1. 状态转移方程:f[i][c]=max{f[i-1][c-k×w[i]]+k×v[i]},0≤k×w[i]≤c ...原创 2021-11-08 18:04:34 · 167 阅读 · 0 评论 -
第七单元 背包专题 7.1部分背包问题 与 7.2 0/1 背包问题
第七单元 背包专题这个整理了好久,求谅解,谢谢7.1 部分背包问题参见 “4.1 装载问题”。部分背包问题是贪心算法问题,其他背包问题都是动态规划问题。7.2 0/1 背包问题!【问题描述】有 n 件物品和一个容量为 C 的背包。第 i 件物品的重量是 w[i],价值是 v[i]。求解将哪些物品装入背包可使价值总和最大。(1) 二维数组表示1. 定义状态:f[i][c]表示前 i 件物品恰放入一个容量为 c 的背包可以获得的最大价值。2. 状态转移方程:// 注意边界.原创 2021-11-05 18:28:59 · 245 阅读 · 0 评论 -
6.11 小结
6.11 小结动态规划:各个阶段采取的决策依赖于当前状态,又随即引起状态的转移,在变化的状态中产生一个决策序列,这种解决多阶段决策最优化问题的方法为动态规划方法。1. 动态规划的基本思想动态规划的基本思想是“空间换时间”,努力避免重复解决相同问题或子问题。由于这个原因,动态规划的速度比搜索快得多。2. 动态规划的原理动态规划满足两个原理:最优化原理、无后效性原则。最优化原理指无论过去的状态和决策如何,对前面的决策所形成的当前状态而言,余下的诸决策必须构成最优策略。通俗地说,如果全局最优,那么一定原创 2021-10-24 18:22:59 · 1023 阅读 · 0 评论 -
6.10 Bitonic 旅行
“货郎担问题”是 NP 问题,只能用搜索解决。后来,J. L. Bentley 提出了的变形——Bitonic Tour问题(又称双调旅程问题)。这个新问题可以用动态规划解决。【问题描述】已知地图上 n 个旅行须到达城市的坐标,要求从最西端的城市开始,严格地由西向东到最东端的城市,再严格地由东向西回到出发点。除出发点外,每个城市经过且只经过一次。给出路程的最短值。(1≤n≤1000)【分析】可以看出来,如果以城市来表示状态,将与搜索无异!1. 递推之前的预处理:将地点按从东到西编号(按横坐标大小.原创 2021-10-16 12:36:11 · 271 阅读 · 0 评论 -
又是C++考试重点哦 ♥ 6.9 状态压缩类问题:过河(说实话这题小学数学就有类似的)
【问题简述】一个独木桥,可看做一个数轴,上面每个点的坐标分别为 0、1、2、……、L(L≤109)。青蛙从坐标为 0 的点出发,不停地跳跃,直到跳到或超过 L 点。它一次跳跃的距离最小为 S,最大为 T(包括 S、T,1≤S≤T≤10)。独木桥上有 M(M≤100)个石子,位置都是已知的,并且不会重叠。青蛙讨厌踩到石子上。问:青蛙若想通过独木桥,最少要踩几个石子?【分析】很容易想出,若 f(i)表示从起点到达 i 坐标点所踩到石子的最小个数,则f(i)=min{f(i-k)}+f(i),s≤k≤t原创 2021-10-15 20:04:40 · 168 阅读 · 0 评论 -
NOIP复习C++篇J组重难点!6.8 树形动态规划
(1) 苹果树【问题描述】有一棵苹果树,如果树枝有分叉,一定是分 2 叉(就是说没有只有 1 个儿子的结点)。这棵树共有 n 个结点(叶子点或者树枝分叉点),编号为 1~n,树根编号一定是 1。我们用一根树枝两端连接的结点的编号来描述一根树枝的位置。下面是一颗有 4 个树枝的树:现在这颗树枝条太多了,需要剪枝。但是一些树枝上长有苹果。已知需要保留的树枝数量为 q,求出最多能留住多少苹果。数据规模:1<n≤100,1≤q≤n,每个树枝上的苹果数量不超过 30000(网友:理论上30000个苹果是.原创 2021-10-15 17:37:51 · 303 阅读 · 0 评论 -
C++重中之重来喽!6.6 递归结构问题 (1) 乘积最大(2) 加分二叉树(有分析,有答案)【推荐收藏】
(1) 乘积最大【问题简述】在一个长度为 n 的非 0 数字串中插入 k 个乘号,使表达式的值最大。(6≤n≤40,1≤k≤6)【分析】1. 划分阶段:以一个乘号为一个阶段。2. 状态表示:f(i,l)表示前 i 个数字插入 l 个乘号之后的最大乘积。3. 状态转移方程:f(i,l) = max{f(j, l-1)×s(j+1, n)},l<j<i, l≤min{k, i-1}边界条件:f(i,0) = s(1,i)其中 s(a,b)表示连接第 a 个数字到第 b 个数字之后表原创 2021-10-06 12:49:48 · 224 阅读 · 0 评论 -
6.4 背包问题 6.5 编号问题
6.4 背包问题参见 之后的“第七单元 背包专题”。先欠更~(没办法)6.5 编号问题(1) 最长非降子序列(LIS)【问题描述】一个序列 a1,a2,a3,…,an共 N 个元素。现在请用动态规划的方法求出从序列找到一个长度最长、且前面一项不大于它后面任何一项的子序列。只需输出序列的长度。N≤1000。【分析】1. 递推思路:f(i)表示对于前 i 个数组成的序列,保留第 i 个数时能取得的非降子序列的最大长度。2. 状态转移方程:f(i)=max{f(j)}+1(aj>ai 且 i原创 2021-10-04 23:30:00 · 102 阅读 · 0 评论 -
6.3 坐标问题
(1) 单向取数问题【问题描述】一个 m×n 的方格,每个格子都有一个数字。现在从方格的左上角出发,到右下角停止。要求只能往右走或往下走,且一次只能走一步。现在使经过的所有数字的和最大,问最大值是多少?(1≤m,n≤1000)【分析】很容易想到贪心算法,即每次往数值更大的方向走。不过它是错误的。正确的做法是动态规划:1. 划分阶段:每走一步为一个阶段。2. 状态表示:f(r,c)表示从起点出发走到第 r 行第 c 列②时经过数字总和的最大值。3. 状态转移方程边界处理:让方格的下标从 .原创 2021-10-03 21:23:10 · 309 阅读 · 0 评论 -
6.2区间问题石子合并n堆石子围成一圈每堆石子的量a[i]已知每次可以将相邻两堆合并为一堆将合并后石子的总量记为这次合并的得分。n-1次合并后石子成为一堆求这n-1次合并的得分之和可能能的最大和最大值
6.2 区间问题:石子合并【问题简述】n 堆石子围成一圈,每堆石子的量 a[i]已知。每次可以将相邻两堆合并为一堆,将合并后石子的总量记为这次合并的得分。n-1 次合并后石子成为一堆。求这 n-1 次合并的得分之和可能的最大值和最小值。(n≤100,1≤i≤n)(1) 环的处理方法以某一点作为起点,按顺时针或逆时针的顺序把环上的元素复制两遍。处理时注意起点范围(0~n-1)和最大长度(n)。例如上面的示例,可以变成:5 9 4 4 5 9 4 4,这样就包含了分别以 5、9、4、4 为起点原创 2021-10-02 18:46:37 · 630 阅读 · 0 评论