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 |