ACM集训计划
假设已有C/C++/JAVA中任何一门程序设计语言基础,熟练掌握基本语法。
Step1: 入门hdu——water~,刷完http://acm.hdu.edu.cn/problemclass.php?id=74
Step2: 数据结构知识点——课本算法代码熟敲。
数据结构需要掌握的内容(数据结构C语言版 严蔚敏|吴伟民):
第1章 绪论 | 算法和算法分析 (时间复杂度分析和空间复杂度分析) |
第2章 线性表 | 2.1线性表的类型定义 2.2线性表的顺序表示和实现 2.3线性表的链式表示和实现 (注意掌握循环链表和双向链表) |
第3章 栈和队列 | 3.1栈的定义、表示和实现 3.2栈的应用举例 3.4队列的定义、表示和实现 (注意掌握循环队列,以及循环队列的数组实现) |
第4章 串 | 掌握串在C语言中的表示方法、常用字符串函数 掌握简单的模式匹配算法 |
第6章 树和二叉树 | 6.1树的定义和基本术语 6.2二叉树 6.2.1二叉树的定义 6.2.2二叉树的性质(重点掌握) 6.2.3二叉树的存储结构 6.3 掌握二叉树的遍历(先序、中序、后序) 6.4树和森林 树的存储结构 森林与二叉树的转换(左孩子右兄弟法) 树和森林的遍历 6.6赫夫曼树及其应用 6.6.1最优二叉树(赫夫曼树)6.6.2赫夫曼编码 |
第7章 图 | 7.1图的定义和术语 7.2图的存储结构 7.2.1数组表示法 7.2.2邻接表 7.3图的遍历 7.3.1深度优先搜索 7.3.2广度优先搜索 7.4图的连通性问题 7.4.1无向图的连通分量和生成树 7.4.3最小生成树算法(prim && kruskal) 7.5有向无环图及其应用 7.5.1拓扑排序 7.6最短路径 7.6.1单源最短路径问题(dijkstra算法) 7.6.2每一对顶点之间的最短路径(floyd算法) |
第9章 查找 | 9.1 掌握有序表的二分查找算法 9.3掌握哈希表的思想及简单的hash算法(如取模法hash) |
第10章 内部排序 | 10.1概述 10.2插入排序(掌握直接插入排序) 10.3快速排序(重点掌握) 10.4选择排序 10.4.1简单选择排序 10.4.2树形选择排序 10.4.3堆排序 10.5归并排序(重点掌握)10.7各种排序方法的比较 |
数据结构对应SDUTOJ题目 http://acm.sdut.edu.cn Online Judge
数据结构实验 | 必做题目 | |
线性表 | 顺序表 | (01)1130 |
线性链表 | (02)1138 (03)1139 (04)2116 (05)2117 (06)2118 (07)2119 (08)2120 (09)2121 (10)2122 (11) 2053 | |
循环链表 | (12)1197 (13)2056 | |
双向链表 | (14)2504 | |
多项式的表示及相加 | (15)1482 | |
栈和队列 | 进制转换 | (16)1252 (17)2131 |
括号匹配 | (18)2134 | |
行编辑程序 | (19)1479 | |
迷宫求解 | (20)2449 | |
表达式求值 | (21)2132(22)2133(23)2484 | |
双向队列 | (24)1466 | |
银行管理 | (25)2087 | |
停车场问题 | (26)2088 | |
排队买饭 | (27)2135 | |
字符串 | 字符串比较 | (28)1333 |
字符串排序 | (29)1334 | |
字符串连接 | (30)2124 | |
字符串匹配 | (31)2125 | |
KMP算法 | (32)2463 | |
字符串哈希 | (33)1500 | |
树和二叉树 | 二叉树历遍 | (34)2137 |
树的计数 | (35)2136 | |
赫夫曼树 | (36)2127 | |
二叉排序树 | (37)2128 (38)2482 | |
统计生成树个数 | (39)2129 | |
图 | 邻接矩阵表示法 | (40)2141 |
邻接表 | (41)2142 | |
深度优先搜索 | (42)2107 | |
广度优先搜索 | (43)1028 | |
无向图的连通分量个数 | (44)1488 | |
有向图的强连通分量 | (45)2506 | |
最小生成树 | (46)2144 | |
拓扑排序 | (47)2140 | |
关键路径 | (48)2498 | |
最短路径 | (49)2413 | |
查找 | 顺序查找 | (50)2040 |
二分查找 | (51)2039 | |
哈希表 | (52)2123 | |
内部排序 | 冒泡排序 | (53)1196 |
选择排序 | (54)1582 | |
快速排序 | (55)2019 | |
归并排序 | (56)2019 | |
堆排序 | (57)2019 | |
插入排序 | (58)1582 | |
基数排序 | (59)1591 |
Step3: 正式集训
集训第一天——POJ纯水题 Like the following~~~
2017 1218 2000 1046 1218 1003 1004 10051008 1013(枚举) 1207 1552 2105 2388 1316 2499 3006(筛法求素数)
正式集训计划:
第一阶段初级:第1周-第4周 | |||
项目 | 时间 | 必做题目 | |
基本算法 | 枚举 | 第1周 | (001)poj1753 (002)poj2965 |
贪心 | (003)poj1328 (004)poj2109 (005)poj2586 | ||
分治法 | (006)poj2524 | ||
递推 | (007)poj2506 | ||
构造法 | (008)poj3295 | ||
模拟法 | (009)poj1068 (010)poj2632 (011)poj1573 (012)poj2993 (013)poj2996 | ||
图算法 | 图的深度优先遍历和广度优先遍历 | 第1周 | (014)poj3278 (015)poj2049 (016)poj3083 |
最短路径算法 | (017)poj1860 (018)poj3259 (019)poj1062 (020)poj2253 (023)poj1125 (024)poj2240 | ||
最小生成树算法 | (025)poj1789 (026)poj2485 (027)poj1258 (028)poj3026 | ||
拓扑排序 | (029)poj1094 (030)poj3267 (031)poj3687 | ||
二分图的最大匹配 | (032)poj3041 (033)poj3020 | ||
最大流的增广路算法 | (034)poj1459 (035)poj3436 | ||
数据结构 | 串 | 第2周 | (036)poj1035 (037)poj3080 (038)poj1936 |
排序 | (039)poj2388 (040)poj2299 | ||
简单并查集的应用 | (041)poj1611 | ||
哈希表和二分查找等高效查找法 | (042)poj3349 (043)poj3274 (044)poj2151 (045)poj1840 (046)poj2002 (047)poj2503 | ||
哈夫曼树 | (048)poj3253 | ||
堆,优先队列 | (049)poj2442 (050)poj1442 | ||
trie树 | (051)poj2513 (052)poj2418 | ||
简单搜索 | 深度优先搜索 | 第2周 | (053)poj2488 (054)poj3083 (055)poj3009 (056)poj1321 (057)poj2251 |
广度优先搜索 | (058)poj3278 (059)poj1426 (060)poj3126 (061)poj3087 (062)poj3414 | ||
简单搜索技巧和剪枝 | (063)poj2531 (064)poj1416 (065)poj2676 (066)poj1129 | ||
动态规划 | 背包问题 | 第3周 | (067)poj1837 (068)poj1276 |
型如下表的简单DP | (069)poj3267 (070)poj1836 (071)poj1260 (072)poj2533 (073)poj3176 (074)poj1080 (075)poj1159 | ||
数学 | 组合数学 | 第3周 | (076)poj3252 (077)poj1850 (078)poj1019 (079)poj1942 |
数论 | (080)poj2635 (081)poj3292 (082)poj1845 (083)poj2115 | ||
计算方法 | (084)poj3273 (085)poj3258 (086)poj1905 (087)poj3122 | ||
计算几何学 | 几何公式 | 第4周 | (088)poj1265(pick定理) |
叉积和点积的运用 | (089)poj2031 (090)poj1039 | ||
多边型的简单算法和相关判定 | (091)poj1408 (092)poj1584 | ||
凸包 | (093)poj2187 (094)poj1113 | ||
第二阶段中级:第4周-第9周 | |||
项目 | 时间 | 必做题目 | |
基本算法 | C++的标准模版库的应用 | 第4周 | (095)poj3096 (096)poj3007 |
较为复杂的模拟题的训练 | (097)poj3393 (098)poj1472 (099)poj3371 (100)poj1027 (101)poj2706 | ||
图算法 | 差分约束系统的建立和求解 | 第5周 | (102)poj1201 (103)poj2983 (104)poj3159 (105)poj1275 (106)poj1364 |
最小费用最大流 | (107)poj2516 (108)poj2195 (109)poj3422 | ||
双连通分量 | (110)poj2942 (111)poj3694 | ||
强连通分支及其缩点 | (112)poj2186 (113)poj3592 (114)poj3114 | ||
图的割边和割点 | (115)poj3352 | ||
最小割模型 | (116)poj3308 (117)poj3155 | ||
KM算法(最大权/最小权) | (118)poj2195 (119)poj2400 (120)poj3686 | ||
数据结构 | 线段树 | 第6周 | (121)poj2528 (122)poj2828 (123)poj2777 (124)poj2886 (125)poj2750 |
静态二叉检索树,平衡树treap,splay | (126)poj2482 (127)poj2352 (128)poj2892 (129)poj3468 | ||
树状树组 | (130)poj1195 (131)poj3321 | ||
RMQ | (132)poj3264 (133)poj3368 | ||
并查集的高级应用 | (134)poj1703 (135)poj2492 | ||
KMP算法 | (136)poj1961 (137)poj2406 | ||
搜索 | 最优化剪枝和可行性剪枝 | 第7周 | (138)poj1699 |
搜索的技巧和优化 | (139)poj3411 (140)poj1724 | ||
记忆化搜索 | (141)poj3373 (142)poj1691 | ||
动态规划 | 较为复杂的动态规划 | 第7周 | (143)poj1191 (144)poj1054 (145)poj3280 (146)poj2029 (147)poj2948 (148)poj1925 (149)poj3034 |
记录状态的动态规划 | (150)poj3254 (151)poj2411 (152)poj1185 | ||
树型动态规划 | (153)poj2057 (154)poj1947 (155)poj2486 (156)poj3140 | ||
数学 | 组合数学,polya定理 置换群 | 第8周 | (157)poj1286 (158)poj2409 (159)poj3270 (160)poj1026 |
高斯消元法 | (161)poj2947 (162)poj1487 (163)poj2065 (164)poj1166 (165)poj1222 | ||
概率问题 | (166)poj3071 (167)poj3440 | ||
GCD、扩展的欧几里德 | (168)poj1061 (169)poj2891 (170)poj3101 (171)poj2115 | ||
计算方法(矩阵、三分等) | (172)poj2976 (173)poj3150 (174)poj3422 (175)poj3070 (176)poj3301 | ||
随机化算法 | (177)poj3318 (178)poj2454 | ||
杂题 | (179)poj1870 (180)poj3296 (181)poj3286 (182)poj1095 | ||
计算几何学 | 坐标离散化 | 第9周 | (183)poj1151 |
扫描线算法 | (184)poj1765 (185)poj1177 (186)poj1151 (187)poj3277 (188)poj2280 (189)poj3004 | ||
多边形的核 | (190)poj3130 (191)poj3335 | ||
几何工具的综合应用 | (192)poj1819 (193)poj1066 (194)poj2043 (195)poj3227 (196)poj2165 (197)poj3429 | ||
第三阶段高级:第10周-第18周 | |||
项目 | 时间 | 必做题目 | |
基本算法 | 代码快速写成 | 第10周 | (198)poj2525 (199)poj1684 (200)poj1421 (201)poj1048 (202)poj2050 (203)poj3306 |
保证正确性和高效性 | (204)poj3434 | ||
图算法 | 度限制最小生成树和第K最短路,分数规划 | 第10-11周 | (205)poj1639 (206)poj3621 (207)poj2976 (208)poj3255 (209)poj2513 (210)poj2449 |
最短路,最小生成树,二分图,最大流问题的相关理论 | (211)poj3155 (212)poj2112 (213)poj1966 (214)poj3281 (215)poj1087 (216)poj2289 (217)poj3216 (218)poj2446 | ||
最优比率生成树 | (219)poj2728(0/1分数规划应用) | ||
最小树形图 | (220)poj3164(朱-刘算法) | ||
次小生成树 | (221)poj1679(存在O(n^2)DP解法) | ||
2-SAT问题 | (222)poj3207 (223)poj3678 (224)poj3683 (225)poj3648 (226)poj2723 (227)poj2749 | ||
无向图、有向图的最小环 | (228)poj1734(floyd扩展) | ||
数据结构 | trie图的建立和应用,DFA | 第12周 | (229)hdu2222 (230)poj2778 (231)poj3691 |
LCA和RMQ问题 | (234)poj1330 | ||
双端队列和它的应用 | (235)poj2823 | ||
左偏树 | (236)poj3666 (237)poj3016 | ||
后缀树,后缀数组 | (238)poj3415 (239)poj3294 (240)poj2774 (241)poj2758 | ||
搜索 | 较麻烦的搜索题目训练 | 第13周 | (242)poj1069 (243)poj3322 (244)poj1475 (245)poj1924 (246)poj2049 (247)poj3426 |
广搜的状态优化 | (248)poj1768 (249)poj1184 (250)poj1872 (251)poj1324 (252)poj2046 (253)poj1482 | ||
深搜的优化 | (254)poj3131 (255)poj2870 (256)poj2286 | ||
动态规划 | 需要用数据结构优化的动态规划 | 第14-15周 | (257)poj2754 (258)poj3378 (259)poj3017 |
四边形不等式理论、斜率优化 | (260)poj1160 (261)poj1180 (262)poj3709 | ||
较难的状态DP、插头DP | (263)poj3133 (264)poj1739 (265)poj2411 (266)poj1763 | ||
数学 | 组合数学 | 第15周 | (267)poj2888 (268)poj2154 |
博奕论 | (269)poj3317 (270)poj1085 | ||
计算几何 | 半平面求交 | 第16周 | (271)poj3384 (272)poj2540 |
可视图的建立 | (273)poj2966 | ||
点集最小圆覆盖 | (274)zju1450 | ||
对踵点 | (275)poj2079 | ||
综合题 | 第16-18周 | (276)poj3109 (277)poj1478 (278)poj1462 (279)poj2729 (280)poj2048 (281)poj3336 (282)poj3315 (283)poj2148 (284)poj1263 |