1、算法竞赛入门经典(第2版)202001.02.03.04.目录第2版前言第1部分 语言篇第2部分 基础篇第3部分 竞赛篇第2版前言01第2版前言第1部分 语言篇021 程序设计入门 1.1 算术表达式 1.5.1 C语言、C99、C11及其他1.5.2 数据类型与输入格式1.5.3 习题1.5.4 小结1.2 变量及其输入1.3 顺序结构程序设计1.4 分支结构程序设计1.5 注解与习题2 循环结构程序设计 2.5.1 习题2.5.2 小结 01020304052.1 for循环012.3 循环的代价032.5 注解与习题05022.2 while循环和do-while循环042.4 算法竞赛
2、中的输入输出框架3 数组和字符串3.2 字符数组 3.4 注解与习题3.4.1 进位制与整数表示3.4.2 思考题3.4.3 黑盒测试和在线评测系统3.4.4 例题一览与习题3.4.5 小结56%Option 247%Option 43.1 数组3.3 竞赛题目选讲 30%Option 323%Option 14 函数和递归DCBA4.1 自定义函数和结构体4.2 函数调用与参数传递4.3 递归4.4 竞赛题目选讲E4.5 注解与习题4 函数和递归4.2 函数调用与参数传递4.2.1 形参与实参4.2.2 调用栈4.2.3 用指针作参数4.2.4 初学者易犯的错误4.2.5 数组作为参数和返回
3、值4.2.6 把函数作为函数的参数4 函数和递归4.3 递归4.3.1 递归定义4.3.2 递归函数4.3.3 C语言对递归的支持4.3.4 段错误与栈溢出4 函数和递归4.5 注解与习题4.5.1 头文件、副作用及其他4.5.2 例题一览和习题4.5.3 小结5 C与STL入门D5.4 竞赛题目举例E5.5 习题A5.1 从C到CB5.2 STL初步C5.3 应用:大整数类5 C与STL入门5.1 从C到C5.1.1 C版框架5.1.2 引用5.1.3 字符串5.1.4 再谈结构体5.1.5 模板5 C与STL入门5.2 STL初步5.2.1 排序与检索5.2.2 不定长数组:vector5
4、.2.3 集合:set5.2.4 映射:map5.2.5 栈、队列与优先队列5.2.6 测试STL5 C与STL入门5.3 应用:大整数类5.3.1 大整数类BigInteger5.3.2 四则运算5.3.3 比较运算符第2部分 基础篇036 数据结构基础6.1 再谈栈和队列A6.2 链表B6.3 树和二叉树C6.4 图D6.5 竞赛题目选讲E6.6 训练参考F6 数据结构基础6.3 树和二叉树6.3.1 二叉树的编号6.3.2 二叉树的层次遍历6.3.3 二叉树的递归遍历6.3.4 非二叉树6 数据结构基础6.4 图6.4.1 用DFS求连通块6.4.2 用BFS求最短路6.4.3 拓扑排序
5、6.4.4 欧拉回路7 暴力求解法7.1 简单枚举7.4 回溯法7.2 枚举排列7.5 路径寻找问题7.6 迭代加深搜索7.3 子集生成7 暴力求解法7.7 竞赛题目选讲7.8 训练参考7 暴力求解法7.2 枚举排列7.2.1 生成1n的排列7.2.2 生成可重集的排列7.2.3 解答树7.2.4 下一个排列7 暴力求解法7.3 子集生成7.3.1 增量构造法7.3.2 位向量法7.3.3 二进制法7 暴力求解法7.4 回溯法7.4.1 八皇后问题7.4.2 其他应用举例第3部分 竞赛篇048 高效算法设计0102030405068.1 算法分析初步8.2 再谈排序与检索8.3 递归与分治8.
6、4 贪心法8.5 算法设计与优化策略8.6 竞赛题目选讲8 高效算法设计8.7 训练参考8 高效算法设计8.1 算法分析初步8.1.1 渐进时间复杂度8.1.2 上界分析8.1.3 分治法8.1.4 正确对待算法分析结果8 高效算法设计8.2 再谈排序与检索8.2.1 归并排序8.2.2 快速排序8.2.3 二分查找8 高效算法设计8.4 贪心法8.4.1 背包相关问题8.4.2 区间相关问题8.4.3 Huffman编码9 动态规划初步9.1 数字三角形9.2 DAG上的动态规划9.3 多阶段决策问题9.6 训练参考9.5 竞赛题目选讲9.4 更多经典模型9 动态规划初步9.1 数字三角形9
7、.1.1 问题描述与状态定义9.1.2 记忆化搜索与递推9 动态规划初步9.2 DAG上的动态规划9.2.1 DAG模型9.2.2 最长路及其字典序9.2.3 固定终点的最长路和最短路9.2.4 小结与应用举例9 动态规划初步9.3 多阶段决策问题9.3.1 多段图的最短路9.3.2 0-1背包问题9 动态规划初步9.4 更多经典模型9.4.1 线性结构上的动态规划9.4.2 树上的动态规划9.4.3 复杂状态的动态规划10 数学概念与方法DCBA10.1 数论初步10.2 计数与概率基础10.3 其他数学专题10.4 竞赛题目选讲E10.5 训练参考10 数学概念与方法10.1 数论初步10
8、.1.1 欧几里德算法和唯一分解定理10.1.2 Eratosthenes筛法10.1.3 扩展欧几里德算法10.1.4 同余与模算术10.1.5 应用举例10 数学概念与方法10.2 计数与概率基础10.2.1 杨辉三角与二项式定理10.2.2 数论中的计数问题10.2.3 编码与解码10.2.4 离散概率初步10 数学概念与方法10.3 其他数学专题10.3.1 递推10.3.2 数学期望10.3.3 连续概率11 图论模型与算法A11.1 再谈树B11.2 最小生成树C11.3 最短路问题D11.4 网络流初步E11.5 竞赛题目选讲F11.6 训练参考11 图论模型与算法11.7 总结
9、与展望11 图论模型与算法11.1 再谈树11.1.1 无根树转有根树11.1.2 表达式树11 图论模型与算法11.2 最小生成树11.2.1 Kruskal算法11.2.2 竞赛题目选解11 图论模型与算法11.3 最短路问题11.3.1 Dijkstra算法11.3.2 Bellman-Ford算法11.3.3 Floyd算法11.3.4 竞赛题目选讲11 图论模型与算法11.4 网络流初步11.4.1 最大流问题11.4.2 增广路算法11.4.3 最小割最大流定理11.4.4 最小费用最大流问题11.4.5 应用举例12 高级专题12.1 知识点选讲12.2 难题选解12.3 小结与
10、习题12 高级专题12.1 知识点选讲12.1.1 自动机12.1.2 树的经典问题和方法12.1.3 可持久化数据结构12.1.4 多边形的布尔运算12 高级专题12.2 难题选解12.2.1 数据结构12.2.2 网络流12.2.3 数学12.2.4 几何12.2.5 非完美算法12.2.6 杂题选讲附录A 开发环境与方法A.1 命令行A.2 操作系统脚本编程入门A.3 编译器和调试器A.4 浅谈IDEDCAB附录A 开发环境与方法A.1 命令行A.1.1 文件系统A.1.2 进程A.1.3 程序的执行A.1.4 重定向和管道A.1.5 常见命令附录A 开发环境与方法A.2 操作系统脚本编程入门A.2.1 Windows下的批处理A.2.2 Linux下的Bash脚本A.2.3 再谈随机数附录A 开发环境与方法A.3 编译器和调试器A.3.1 gcc的安装和测试A.3.2 常见编译选项A.3.3 gdb简介A.3.4 gdb的高级功能第3部分 竞赛篇主要参考书目感谢聆听