一:知识点
数据结构:
1,单,双链表及循环链表
2,树的表示与存储,二叉树(概念,遍历)二叉树的
应用(二叉排序树,判定树,博弈树,解答树等)
3,文件操作(从文本文件中读入数据并输出到文本文
件中)
4,图(基本概念,存储结构,图的运算)
数学知识
1,离散数学知识的应用(如排列组合、简单的图论,数理逻辑)
2,数论知识
3,线性代数
4,组合代数
5,计算几何
二 算法
1,排序算法(冒抛法,插入排序,合并排序,快速排序,堆排序)
2,查找(顺序查找,二分发)
3,回溯算法
4,递归算法
5,分治算法
6,模拟法
7,贪心法
8,简单搜索算法(深度优先,广度优先),搜索中的剪枝,A*算法
9,动态规划的思想及基本算法
10,高精度运算
三、ACM竞赛的题型分析
竞赛的程序设计一般只有16种类型,它们分别是:
Dynamic Programming (动态规划)
Greedy (贪心算法)
Complete Search (穷举搜索)
Flood Fill (不知该如何翻译)
Shortest Path (最短路径)
Recursive Search Techniques (回溯搜索技术)
Minimum Spanning Tree (最小生成树)
Knapsack (背包问题)
Computational Geometry (计算几何学)
Network Flow (网络流)
Eulerian Path (欧拉回路)
Two-Dimensional Convex Hull (不知如何翻译)
BigNums (大数问题)
Heuristic Search (启发式搜索)
Approximate Search (近似搜索)
Ad Hoc Problems (杂题)
一:递归与分治
1. 二分查找
2. 合并排序
3. 快速排序
二:回溯
1. 0-1背包问题
2. 装载问题
3. 堡垒问题(ZOJ1002)
4. *翻硬币问题
5. 8皇后问题
6. 素数环问题
7. 迷宫问题
8. *农场灌溉问题(ZOJ2412)
9. *求图像的周长(ZOJ1047)
10. *骨牌矩阵
11. *字母转换(ZOJ1003)
12. *踩气球(ZOJ1004)
三:搜索
1. Floodfill
2. 电子老鼠闯迷宫
3. 跳马
4. 独轮车
5. 皇宫小偷
6. 分酒问题
7. *找倍数
8. *8数码难题
四:动态规划
1. 最长公共子序列
2. 计算矩阵连乘积
3. 凸多边形的最优三角剖分
4. 防卫导弹
5. *石子合并
6. *最小代价子母树
7. *旅游预算
8. *皇宫看守
9. *游戏室问题
10. *基因问题
11. *田忌赛马
五:贪心与随机算法
1. 背包问题
2. 搬桌子问题
3. *照亮的山景
4. *用随即算法求解8皇后问题
5. 素数测试
《算法艺术与信息学竞赛》的习题提示在网上可搜到
一.动态规划
参考资料:
刘汝佳《算法艺术与信息学竞赛》
《算法导论》
推荐题目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1141 简单
http://acm.pku.edu.cn/JudgeOnline/problem?id=2288 中等,经典TSP问题
http://acm.pku.edu.cn/JudgeOnline/problem?id=2411 中等,状态压缩DP
http://acm.pku.edu.cn/JudgeOnline/problem?id=1112 中等
http://acm.pku.edu.cn/JudgeOnline/problem?id=1848 中等,树形DP。
可参考《算法艺术与信息学竞赛》动态规划一节的树状模型
http://acm.zju.edu.cn/show_problem.php?pid=1234 中等,《算法艺术与信息学竞赛》中的习题
http://acm.pku.edu.cn/JudgeOnline/problem?id=1947 中等,《算法艺术与信息学竞赛》中的习题
http://acm.pku.edu.cn/JudgeOnline/problem?id=1946 中等,《算法艺术与信息学竞赛》中的习题
http://acm.pku.edu.cn/JudgeOnline/problem?id=1737 中等,递推
http://acm.pku.edu.cn/JudgeOnline/problem?id=1821 中等,需要减少冗余计算
http://acm.zju.edu.cn/show_problem.php?pid=2561 中等,四边形不等式的简单应用
http://acm.pku.edu.cn/JudgeOnline/problem?id=1038 较难,状态压缩DP,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1390 较难,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=3017 较难,需要配合数据结构优化(我的题目^_^)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1682 较难,写起来比较麻烦
http://acm.pku.edu.cn/JudgeOnline/problem?id=2047 较难
http://acm.pku.edu.cn/JudgeOnline/problem?id=2152 难,树形DP
http://acm.pku.edu.cn/JudgeOnline/problem?id=3028 难,状态压缩DP,题目很有意思
http://acm.pku.edu.cn/JudgeOnline/problem?id=3124 难
http://acm.pku.edu.cn/JudgeOnline/problem?id=2915 非常难
二.搜索
参考资料:
刘汝佳《算法艺术与信息学竞赛》
推荐题目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1011 简单,深搜入门题
http://acm.pku.edu.cn/JudgeOnline/problem?id=1324 中等,广搜
http://acm.pku.edu.cn/JudgeOnline/problem?id=2044 中等,广搜
http://acm.pku.edu.cn/JudgeOnline/problem?id=2286 较难,广搜
http://acm.pku.edu.cn/JudgeOnline/problem?id=1945 难,IDA*,迭代加深搜索,需要较好的启发函数
http://acm.pku.edu.cn/JudgeOnline/problem?id=2449 难,可重复K最短路,A*。
可参考解题报告:
http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144
http://acm.pku.edu.cn/JudgeOnline/problem?id=1190 难,深搜剪枝,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1084 难,《算法艺术与信息学竞赛》习题
http://acm.pku.edu.cn/JudgeOnline/problem?id=2989 难,深搜
http://acm.pku.edu.cn/JudgeOnline/problem?id=1167 较难,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1069 很难
三. 常用数据结构
参考资料:
刘汝佳《算法艺术与信息学竞赛》
《算法导论》
线段树资料:
http://home.ustc.edu.cn/~zhuhcheng/ACM/segment_tree.pdf
树状数组资料
http://home.ustc.edu.cn/~zhuhcheng/ACM/tree.ppt
关于线段树和树状数组更多相关内容可在网上搜到
后缀数组资料
http://home.ustc.edu.cn/~zhuhcheng/ACM/suffix_array.pdf
http://home.ustc.edu.cn/~zhuhcheng/ACM/linear_suffix.pdf
推荐题目
http://acm.pku.edu.cn/JudgeOnline/problem?id=2482 较难,线段树应用,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1151 简单,线段树应用矩形面积并,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=3225 较难,线段树应用,可参考解题报告
http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1233
http://acm.pku.edu.cn/JudgeOnline/problem?id=2155 难,二维树状数组。
http://acm.pku.edu.cn/JudgeOnline/problem?id=2777 中等,线段树应用。
http://acm.pku.edu.cn/JudgeOnline/problem?id=2274 难,堆的应用,《算法艺术与信息学竞赛》中有解答
http://acm.zju.edu.cn/show_problem.php?pid=2334 中等,左偏树,二项式堆或其他可合并堆的应用。
左偏树参考http://www.nist.gov/dads/HTML/leftisttree.html
二项式堆参见《算法导论》相关章节
http://acm.pku.edu.cn/JudgeOnline/problem?id=1182 中等,并查集
http://acm.pku.edu.cn/JudgeOnline/problem?id=1816 中等,字典树
http://acm.pku.edu.cn/JudgeOnline/problem?id=2778 较难,多串匹配树
参考:http://home.ustc.edu.cn/~zhuhcheng/ACM/zzy2004.pdf
http://acm.pku.edu.cn/JudgeOnline/problem?id=1743 难,后缀数组
http://acm.pku.edu.cn/JudgeOnline/problem?id=2774 较难,最长公共子串,经典问题,后缀数组
http://acm.pku.edu.cn/JudgeOnline/problem?id=2758 很难,后缀数组
可参考解题报告
http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1178
http://acm.pku.edu.cn/JudgeOnline/problem?id=2448 很难,数据结构综合运用
四.图论基础
参考资料:
刘汝佳《算法艺术与信息学竞赛》
《算法导论》
《网络算法与复杂性理论》谢政
推荐题目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=2337 简单,欧拉路
http://acm.pku.edu.cn/JudgeOnline/problem?id=3177 中等,无向图割边
http://acm.pku.edu.cn/JudgeOnline/problem?id=2942 较难,无向图双连通分支
http://acm.pku.edu.cn/JudgeOnline/problem?id=1639 中等,最小度限制生成树,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=2728 中等,最小比率生成树,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=3013 简单,最短路问题
http://acm.pku.edu.cn/JudgeOnline/problem?id=1275
中等,差分约束系统,Bellman-Ford求解,《算法艺术与信息学竞赛》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1252 简单,Bellman-Ford
http://acm.pku.edu.cn/JudgeOnline/problem?id=1459 中等,网络流
http://acm.pku.edu.cn/JudgeOnline/problem?id=2391 较难,网络流
http://acm.pku.edu.cn/JudgeOnline/problem?id=1325 中等,二部图最大匹配
http://acm.pku.edu.cn/JudgeOnline/problem?id=2226 较难,二部图最大匹配
http://acm.pku.edu.cn/JudgeOnline/problem?id=2195 中等,二部图最大权匹配
KM算法参考《网络算法与复杂性理论》
http://acm.pku.edu.cn/JudgeOnline/problem?id=2516 较难,二部图最大权匹配
http://acm.pku.edu.cn/JudgeOnline/problem?id=1986 中等,LCA(最近公共祖先)问题
参考Tarjan's LCA algorithm 《算法导论》第21章习题
http://acm.pku.edu.cn/JudgeOnline/problem?id=2723 较难,2-SAT问题
参考:http://home.ustc.edu.cn/~zhuhcheng/ACM/2-SAT.PPT
http://acm.pku.edu.cn/JudgeOnline/problem?id=2749 较难,2-SAT问题
http://acm.pku.edu.cn/JudgeOnline/problem?id=3164 较难,最小树形图
参考《网络算法与复杂性理论》中朱-刘算法
五.数论及组合计数基础
http://acm.pku.edu.cn/JudgeOnline/problem?id=1811 简单,素数判定,大数分解
参考算法导论相关章节
http://acm.pku.edu.cn/JudgeOnline/problem?id=2888 较难,Burnside引理
http://acm.pku.edu.cn/JudgeOnline/problem?id=2891 中等,解模方程组
http://acm.pku.edu.cn/JudgeOnline/problem?id=2154 中等,经典问题,波利亚定理
http://cs.scu.edu.cn/soj/problem.action?id=2703 难,极好的题目,Burnside引理+模线性方程组
http://acm.pku.edu.cn/JudgeOnline/problem?id=2764 较难,需要数学方法,该方法在《具体数学》第七章有讲
http://acm.pku.edu.cn/JudgeOnline/problem?id=1977 简单,矩阵快速乘法
一阶段:
练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,
因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打
出来.
1.最短路(Floyd、Dijstra,BellmanFord)
2.最小生成树(先写个prim,kruscal要用并查集,不好写)
3.大数(高精度)加减乘除
4.二分查找. (代码可在五行以内)
5.叉乘、判线段相交、然后写个凸包.
6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)
7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.
8. 调用系统的qsort, 技巧很多,慢慢掌握.
9. 任意进制间的转换
第二阶段:
练习复杂一点,但也较常用的算法。
如:
1. 二分图匹配(匈牙利),最小路径覆盖
2. 网络流,最小费用流。
3. 线段树.
4. 并查集。
5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp
6.博弈类算法。博弈树,二进制法等。
7.最大团,最大独立集。
8.判断点在多边形内。
9. 差分约束系统.
10. 双向广度搜索、A*算法,最小耗散优先.
第三阶段:
前两个阶段是打基础,第三阶段是锻炼在比赛中可以快速建立模型、想新算法
。这就要平时多做做综合的题型了。
1. 把oibh上的论文看看(大概几百篇的,我只看了一点点,呵呵)。
2. 平时扫扫zoj上的难题啦,别老做那些不用想的题.(中大acm的版主经常说我挑简单的来
做:-P )
3. 多参加网上的比赛,感受一下比赛的气氛,评估自己的实力.
4. 一道题不要过了就算,问一下人,有更好的算法也打一下。