前 言
ACM-ICPC是国际计算机学会组织的国际大学生程序设计竞赛。这项赛事是大学生智力与计算机解题能力的竞赛,是大学生展示水平与才华的大舞台,是各高校计算机教育成果的直接体现,也是IT企业与世界顶尖计算机人才对话的最佳机会。因而,程序设计竞赛吸引了越来越多的高校参赛。
ACM-ICPC中的“基本算法”用于指导学生分析问题和设计算法解决问题。学习常用基本算法设计方法,有助于理解算法设计的基本思想和科学原理,掌握算法设计的基本知识和基本技能,掌握算法设计中的计算思维和解题策略。
在本书各章的讨论中,首先介绍一种算法设计方法的基本思想,然后将计算机经典问题和算法设计方法很好地结合起来,运用该算法设计方法去解决这些问题,并给出C语言描述,最后通过实战训练予以巩固和提高,以达到融会贯通的效果。
本书的资料来源于吉林师范大学ACM-ICPC训练讲义,所选典型例题和实战训练题目分别来自吉林师范大学ONLINE JUDGE(JLOJ),网址为http://acm.jlnu.edu.cn;北京大学ONLINE JUDGE(POJ),网址为http:// poj.org;浙江大学ONLINE JUDGE(ZOJ),网址为http://acm.zju.edu.cn;杭州电子科技大学ONLINE JUDGE(HDOJ),网址为http://acm.hdu.edu.cn。
全书共11章。第1章简要介绍了ACM-ICPC、算法、算法分析和优化的基础知识;第2~11章系统讲解了10种常用的算法设计方法,分别为求值法、递推法、递归法、枚举法、模拟法、分治法、贪心法、回溯法、构造法和动态规划法。
本书由吉林师范大学滕国文教授和李昊讲师撰写,从2005年开始,两位老师先后担任吉林师范大学ACM-ICPC代表队的主教练,开设了ACM-ICPC选修课,并成立了ACM-ICPC集训队,进行了十多年的教学尝试和实践训练。集训队主力队员施海勇、郭志鑫、李俊岐、李长彬和李婉琪参加了本书部分代码编写和程序调试工作,白文秀、曹宇、滕泰、于淼、温毓铭、王双印、李然、高巨、赵腾飞和米雪阳等参与了本书文稿的校对工作,作者在此一并致以诚挚的谢意!全书由滕国文教授统稿。
在本书的编写过程中,作者参阅并借鉴了国内外诸多同行的文章和著作,这里不一一列举、标明,在此向他们致以谢意!
由于作者水平有限,加之学科理论与技术发展日新月异,对于书中疏漏与不妥之处,恳请广大读者批评指正。
作 者
2018年1月于四平
