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 |