❶ 挑战程序设计竞赛(第2版)的目录

《挑战程序设计竞赛(第2版)》
第1章蓄势待发——准备篇1 1.1 何谓程序设计竞赛2 1.2 最负盛名的程序设计竞赛5 1.2.1 世界规模的大赛——google code jam(gcj)5 1.2.2 向高排名看齐!——topcoder5 1.2.3 历史最悠久的竞赛—— acm-icpc6 1.2.4 面向中学生的信息学奥林匹克竞赛——joi-ioi6 1.2.5 通过网络自动评测——online judge(oj)6 1.3 本书的使用方法7 1.3.1 本书所涉及的内容7 1.3.2 所用的编程语言7 1.3.3 题目描述的处理7 1.3.4 程序结构7 1.3.5 练习题8 1.3.6 读透本书后更上一层楼的练习方法8 1.4 如何提交解答9 1.4.1 poj的提交方法9 1.4.2 gcj的提交方法11 1.5 以高效的算法为目标15
.1.5.1 什么是复杂度15 1.5.2 关于运行时间15 1.6 轻松热身16 1.6.1 先从简单题开始16 1.6.2 poj的题目ants18 1.6.3 难度增加的抽签问题20 第2章初出茅庐——初级篇25 2.1 最基础的“穷竭搜索”26 2.1.1 递归函数26 2.1.2 栈27 2.1.3 队列28 2.1.4 深度优先搜索29 2.1.5 宽度优先搜索33 2.1.6 特殊状态的枚举37 2.1.7 剪枝38 2.2 一往直前!贪心法39 2.2.1 硬币问题39 2.2.2 区间问题40 2.2.3 字典序最小问题43 2.2.4 其他例题45 2.3 记录结果再利用的“动态规划”51 2.3.1 记忆化搜索与动态规划51 2.3.2 进一步探讨递推关系57 2.3.3 有关计数问题的dp66 2.4 加工并存储数据的数据结构70 2.4.1 树和二叉树70 2.4.2 优先队列和堆71 2.4.3 二叉搜索树77 2.4.4 并查集84 2.5 它们其实都是“图”91 2.5.1 图是什么91 2.5.2 图的表示94 2.5.3 图的搜索97 2.5.4 最短路问题99 2.5.5 最小生成树105 2.5.6 应用问题107 2.6 数学问题的解题窍门113 2.6.1 辗转相除法113 2.6.2 有关素数的基础算法117 2.6.3 模运算121 2.6.4 快速幂运算122 2.7 一起来挑战gcj的题目(1)125 2.7.1 minimum scalar proct125 2.7.2 crazy rows127 2.7.3 bribe the prisoners129 2.7.4 millionaire132 第3章出类拔萃——中级篇137 3.1 不光是查找值!“二分搜索”138 3.1.1 从有序数组中查找某个值138 3.1.2 假定一个解并判断是否可行140 3.1.3 最大化最小值142 3.1.4 最大化平均值143 3.2 常用技巧精选(一)146 3.2.1 尺取法146 3.2.2 反转(开关问题)150 3.2.3 弹性碰撞158 3.2.4 折半枚举(双向搜索)160 3.2.5 坐标离散化164 3.3 活用各种数据结构167 3.3.1 线段树167 3.3.2 binary indexed tree174 3.3.3 分桶法和平方分割183 3.4 熟练掌握动态规划191 3.4.1 状态压缩dp191 3.4.2 矩阵的幂199 3.4.3 利用数据结构高效求解206 3.5 借助水流解决问题的网络流209 3.5.1 最大流209 3.5.2 最小割212 3.5.3 二分图匹配217 3.5.4 一般图匹配220 3.5.5 匹配、边覆盖、独立集和顶点覆盖221 3.5.6 最小费用流222 3.5.7 应用问题228 3.6 与平面和空间打交道的计算几何250 3.6.1 计算几何基础250 3.6.2 极限情况255 3.6.3 平面扫描258 3.6.4 凸包260 3.6.5 数值积分263 3.7 一起来挑战gcj的题目(2)267 3.7.1 numbers267 3.7.2 no cheating269 3.7.3 stock charts271 3.7.4 watering plants273 3.7.5 number sets278 3.7.6 wi-fi towers280 第4章登峰造极——高级篇285 4.1 更加复杂的数学问题286 4.1.1 矩阵286 4.1.2 模运算的世界291 4.1.3 计数295 4.1.4 具有对称性的计数300 4.2 找出游戏的必胜策略305 4.2.1 游戏与必胜策略305 4.2.2 nim311 4.2.3 grundy数315 4.3 成为图论大师之路320 4.3.1 强连通分量分解320 4.3.2 2-sat324 4.3.3 lca328 4.4 常用技巧精选(二)335 4.4.1 栈的运用335 4.4.2 双端队列的运用337 4.4.3 倍增法345 4.5 开动脑筋智慧搜索350 4.5.1 剪枝350 4.5.2 a*与ida*356 4.6 划分、解决、合并:分治法359 4.6.1 数列上的分治法359 4.6.2 树上的分治法360 4.6.3 平面上的分治法364 4.7 华丽地处理字符串368 4.7.1 字符串上的动态规划算法368 4.7.2 字符串匹配373 4.7.3 后缀数组378 4.8 一起来挑战gcj的题目(3)387 4.8.1 mine layer387 4.8.2 year of more code jam392 4.8.3 football team395 4.8.4 endless knight399 4.8.5 the year of code jam403 本书中未涉及的拓展主题408 书中例题列表411 参考文献413