入门三本:
《数据结构与算法》(傅清祥,王晓东编著,我所见过的最好的算法教材)
程序设计导引及在线实践 作者: 李文新
ACM程序设计培训教程 吴昊
基础提高:
算法艺术与信息学竞赛 第二版 刘汝佳
算法设计与分析 王晓东
算法设计与试验题解 王晓东
科曼:《算法导论》
组合数学 第三版 冯舜玺 译
计算几何-算法设计与分析 周培德
国际信息学奥林匹克竞赛指导— — 实用算法的分析与程序设计 吴文虎 王建德
网络算法与复杂性理论 谢政 李建平
《Concrete Mathematics --- A Foundation For Computer Science》 Ronald L. Graham , Donald E. Knuth , Oren Patashnik《具体数学》(能买到中文版最好)
《计算机程序设计艺术》三卷 Knuth
组合数学的算法与程序设计
《程序设计中的组合数学》 吴文虎
图论的算法与程序设计
图、网络与算法
国际大学生程序设计竞赛辅导教程 郭嵩山 崔昊
《ACM国际大学生程序设计竞赛试题与解析》全部册(吴文虎著,清华大学出版社)
C算法.第1卷,基础、数据结构、排序和搜索(第三版)
C算法(第2卷图算法第3版中文版)译者:周良忠 (美国)塞奇威克著
国际大学生程序设计竞赛例题解 四本 郭嵩山
请所有的新队员认真完成以下各题。如果做题遇到困难,如题意难以理解、不知如何着手或不知错在哪里,不要气馁,可以请教别的队员,也可请教教练。我们会尽力帮助你完成这几组中每一道题。但不要复制别人的程序,即便参考了别人的程序,也要亲自再完成一遍。而且不建议过多参考别人程序,这样会消弱训练的效果,也减少了思考的乐趣。
有些队员可能觉得某些题太简单,但我们还是建议将它们都做掉。因为题目虽然简单,但是再简单的题目都不能保证一次做对,而做错题的各种原因如题意理解错误,格式错误等你都会碰到。了解这些原因对减少错误率很有好处。
做题前请了解一些规范:
1. main函数应为int型,最后return 0 ,即:
int main()
{
return 0;
}
这样做是因为避免有些编译器报错。
2. 为了便于核对,请在代码开头加上可以表明题目的注释,如:
//ZJU1001; 等
Group 1:起步
Group 3:英文题(2)
下面这些题可能稍微难一些,但与上面一组难度上并没有本质区别。只要仔细想想,应当不难做出。
编号 来源 题号 标题 评注
3.1 ZJU 1489 2^x mod n = 1
3.2 ZJU 1712 Skew Binary
3.3 ZJU 1016 Parencodings
3.4 ZJU 1350 The Drunk Jailer
3.5 ZJU 1051 A New Growth Industry 这三题可能比较繁琐,做的时候要仔细
3.6 ZJU 1178 Booklet PrintingBook
3.7 ZJU 1078 Palindrom Numbers
Group 7: 新一组练习
这一组题目较综合,难度不一。(题目下载)
编号 来源 题号 标题 评注
7.1 ZJU 1068 P,MTHBGWB
7.2 ZJU 1146 LC-Display
7.3 ZJU 1243 URLs
7.4 ZJU 1115 Digital Roots
7.5 ZJU 1180 Self Numbers
7.6 ZJU 1337 Pi
7.7 ZJU 1312 Prime Cuts
7.8 ZJU 1326 M*A*S*H
建议用链表做
7.9 ZJU 1494 Climbing Worm
7.10 ZJU 1577 GCD & LCM
7.11 ZJU 2122 A Flea on a Chessboard
7.12 ZJU 1628 Diamond
7.13 ZJU 1630 Die
7.14 ZJU 1517 Grandpa's Rubik Cube
7.15 ZJU 1161 Gone Fishing (新加)贪心经典,可以后再做
专题1:递归运用初步
对递归的介绍,请看这里。
递归的应用总是和深度优先搜索联系到一起。这里先请看两篇有关的文章,一篇中文的,一篇英文的。
看了这两篇文章,应当对深度优先的基本概念有些了解。请结合样例程序仔细体会8皇后问题的解法。这是很经典的深度优先搜索问题。
以下是一些问题的样例程序:
整数拆分
组合问题
全排列
八皇后问题
理解这些程序若有困难,我们会详细讲解它们。理解后,请自己再编一遍。
下面是一些有关它们的练习。
关于这方面的题目很多,我们会不断添加。
Group Z1:递归和深度优先搜索初步
Group 11: 搜索初步
深度优先搜索和广度优先搜索是属于常用的搜索技术。前者用到递归,后者涉及队列。
深度优先搜索对于解决某些问题并不一定是最好的,但很容易实现,有时也十分有效,它的难点在于如何剪枝优化。出现在递归初步中的题目可以算是深搜的一种。
广度优先搜索技术的结构相对固定,但节点的判重也是个难点。由于时间效率的原因,广度优先搜索运用得更为广泛。
下面是关于它们的一些练习。
编号 来源 题号 标题
11.0 ZJU 2416 Open the Lock
广度优先。(样例程序)
11.1 ZJU 1091 Knight Moves 最简单的广度优先搜索问题,但包括了这类方法的所有要素。
11.2 ZJU 1005 Jugs 典型的广度优先
11.3 ZJU 1649 Rescue 广度优先在迷宫问题中的应用
11.4 ZJU 1002 Fire Net 这些都是可以运用深度优先的题目。有些需要很好的剪枝。
11.5 ZJU 1003 Crashing Balloon
11.6 ZJU 1004 Anagrams by Stack
Group 12: 深度优先搜索
下面是关于深度优先搜索(DFS)的一些练习。
编号 来源 题号 标题
12.0 PKU 1256 Anagram
生成不重复排列
12.1 ZJU 1711 Sum It Up 生成不重复组合
12.2 ZJU 2412 Farm Irrigation 初步,有的需要剪枝
12.3 ZJU 1694 Shredding Company
12.4 ZJU 1457 Prime Ring Problem
12.5 ZJU 1204 Additive equations
12.6 ZJU 2192 T-shirt Gumbo 进阶,有序搜索与剪枝
12.7 ZJU 1909 Square
12.8 ZJU 1987 Vase Collection
12.9 ZJU 1937 Addition Chains
12.10 ZJU 1984 Genetic Code
12.11 ZJU 2110 Tempter of the Bone
12.12 ZJU 1179 Finding Rectangles 难题,需要很好搜索策略和剪枝技巧
12.13 ZJU 1411 Anniversary
12.14 ZJU 1008 Gnome Tetravex
12.15 ZJU 1499 Increasing Sequences
Group 13: 广度优先搜索
下面是关于广度优先搜索(BFS)的一些练习。
编号 来源 题号 标题
13.0 ZJU 1438 Asteroids! 三维迷宫,想想如何控制方向
13.1 ZJU 2050 Flip Game 可以尝试一下位运算
13.2 ZJU 2081 Mission Impossible 可以用BFS+DFS
13.3 ZJU 1310 Robot 进阶,稍难一点
13.4 ZJU 1671 Walking Ant
13.5 ZJU 1940
Dungeon Master
13.6 ZJU 1103 Hike on a Graph
13.7 ZJU 1358 Moving Object Recognition
13.8 ZJU 1217 Eight 难题,注意状态的表示与哈希
13.9 ZJU 1227 Free Candies
13.10 ZJU 1505 Solitaire
13.11 ZJU 1361 Holedox Movi
Group 14: 图--遍历(Graph Traversal)、传递闭包(Transitive Closure)
编号 来源 题号 标题
14.0 ZJU 1221 Risk 用BFS也可以解决最短路径问题
14.1 ZJU 2165 Red and Black 基于网格的连通性分析
14.2 ZJU 1589 Professor John 传递闭包,也可以用DFS
14.3 ZJU 1085 Alien Security