算法競賽入門筆記
謝子揚、尹志揚
買這商品的人也買了...
-
$650$507 -
$490$382 -
$480$379 -
$450$351 -
$403Python 網絡爬蟲實戰, 2/e
-
$383Python 網絡爬蟲實戰
-
$560$437 -
$490$387 -
$534$507 -
$1,000$790 -
$673嵌入式 C語言自我修養 — 從芯片、編譯器到操作系統
-
$359$341 -
$281基於Python的概率論與數理統計實驗
-
$403Python 網絡爬蟲框架 Scrapy 從入門到精通
-
$714$678 -
$650$513 -
$599$569 -
$539$512 -
$700$546 -
$680$537 -
$594$564 -
$510零基礎開發 AI Agent:手把手教你用釦子做智能體
-
$780$616 -
$880$695 -
$550$435
商品描述
《算法競賽入門筆記》這本書是針對想要進入算法競賽領域的人設計的,從參賽者的視角出發,結合編者的親身經驗,內容非常全面且實用。這本書共分為13章,內容涵蓋了從基礎算法到進階技巧的各個層面,並且提供了大量實戰例題,幫助讀者在真實比賽中能夠靈活運用所學的知識。
書中的幾個亮點包括:
-
理論與實踐結合:每一章節都不僅講解了理論知識,還通過例題來幫助讀者實際理解如何應用這些算法。這樣的結合能讓讀者更快地掌握每個算法的要點,並在比賽中取得好的表現。
-
高頻考點和實用技巧總結:編者從多年的競賽經驗中總結了高頻考點,並將這些重要的內容系統地進行歸納,使讀者能在短時間內掌握最有用的知識點。
-
簡潔的代碼模板與圖示說明:書中提供了清晰且簡潔的C++代碼模板,這些代碼易於閱讀與理解,幫助讀者快速掌握編程技巧。同時,對於難度較高的概念和算法,書中還配有直觀的手繪圖示,這樣不僅能加深理解,還能提高學習效率。
-
適用人群:這本書不僅適合參加各類算法競賽的學生(如XCPC、藍橋杯等),對於希望提高編程技能的求職者,或者算法愛好者,這本書也能提供極大的幫助。
總體來說,《算法競賽入門筆記》是一本結合了豐富實戰經驗與理論知識的書籍,無論是對於參賽者,還是對於希望提升編程技能的人,都是一本非常好的學習指南。
目錄大綱
目錄
第1章 賽前準備 1
1.1 算法競賽簡介 1
1.1.1 ACM-ICPC簡介 2
1.1.2 CCPC簡介 4
1.1.3 NOIP/NOI/ CSP-J/S簡介 4
1.1.4 藍橋杯簡介 7
1.1.5 天梯賽簡介 7
1.2 語言和工具 8
1.2.1 競賽語言 8
1.2.2 編程環境 8
1.2.3 訓練平臺 8
1.3 能力要求和學習建議 9
1.3.1 如何邁出算法競賽第一步 9
1.3.2 如何合理且高效地訓練 10
1.3.3 補題和總結的重要性 10
1.3.4 如何正確看待算法競賽的付出和收益 10
第2章 基礎語法 12
2.1 第一個程序:Hello World 12
2.1.1 程序示例 12
2.1.2 頭文件 13
2.1.3 命名空間 13
2.1.4 main函數 14
2.2 輸入與輸出 14
2.2.1 scanf和printf 14
2.2.2 cin和cout 15
2.2.3 各種輸入/輸出示例 16
2.3 常用的基礎數據類型和數學運算 17
2.3.1 基本數據類型 17
2.3.2 常用的數學運算 17
2.4 分支語句 19
2.4.1 if語句 19
2.4.2 三目運算符 21
2.5 循環語句 22
2.5.1 for循環 22
2.5.2 while循環 23
2.6 數組 23
2.6.1 數組的結構 23
2.6.2 開闢數組空間 24
2.6.3 數組元素初始化 26
2.6.4 數組和指針的關系 27
2.7 函數 28
2.7.1 函數的聲明和實現 28
2.7.2 函數的調用 28
2.7.3 Lambda函數 29
2.8 結構體 29
2.8.1 結構體的定義 29
2.8.2 結構體數組 30
2.9 推薦代碼規範 31
2.9.1 使用頭文件bits/stdc++.h 31
2.9.2 使用std命名空間 31
2.9.3 代碼縮進規範 31
2.9.4 代碼換行規範 32
2.9.5 for循環規範 32
2.9.6 使用longlong類型是好習慣 32
2.9.7 不要過分壓行 33
2.9.8 不要輕易使用宏定義 33
2.9.9 適當撰寫註釋 33
2.10 語法練習題 34
第3章 基礎算法 36
3.1 時空復雜度分析 36
3.1.1 時間復雜度分析 36
3.1.2 空間復雜度分析 38
3.2 暴力枚舉 39
3.2.1 什麽是解空間 39
3.2.2 解空間的枚舉方法 40
3.2.3 例題講解 42
3.3 二分法 46
3.3.1 二分法的特徵 46
3.3.2 二分法的類型 46
3.3.3 例題講解 48
3.4 雙指針 52
3.4.1 雙指針題的特徵 52
3.4.2 雙指針的類型 54
3.4.3 例題講解 54
3.5 其他 57
3.5.1 遞歸 57
3.5.2 排序 58
3.5.3 位運算 61
3.5.4 貪心算法 62
3.5.5 分治法 66
第4章 STL的基本使用 70
4.1 STL中的數據結構 70
4.1.1 向量(vector) 70
4.1.2 棧(stack) 72
4.1.3 隊列(queue) 75
4.1.4 map 77
4.1.5 堆優先隊列(priority_queue) 80
4.1.6 集合(set) 86
4.1.7 多重集合(multiset) 91
4.1.8 雙端隊列(deque) 94
4.1.9 string 95
4.1.10 pair 98
4.1.11 bitset 99
4.2 STL中的算法 100
4.2.1 sort()函數 101
4.2.2 lower_bound()和upper_bound()函數 102
4.2.3 reverse()函數 103
4.2.4 swap()函數 104
4.2.5 next_permutation()和prev_permutation()函數 105
第5章 搜索 108
5.1 深度優先搜索(回溯法) 108
5.1.1 子集樹 108
5.1.2 排列樹 109
5.1.3 FloodFill算法 109
5.1.4 例題講解 111
5.2 廣度優先搜索 116
5.2.1 等權的最短路徑 116
5.2.2 最少操作次數 121
5.3 搜索的優化方法 122
5.3.1 剪枝 122
5.3.2 記憶化搜索 122
5.3.3 例題講解 125
第6章 動態規劃 128
6.1 動態規劃基礎 128
6.1.1 狀態的定義 129
6.1.2 狀態轉移方程 129
6.1.3 註意邊界條件 130
6.1.4 做題的基本步驟 130
6.2 背包DP 130
6.2.1 01背包 130
6.2.2 完全背包 134
6.2.3 多重背包 134
6.2.4 例題講解 136
6.3 區間DP 139
6.3.1 石子合並 140
6.3.2 例題講解 141
6.4 存在性DP 143
6.4.1 什麽是存在性DP 144
6.4.2 例題講解 144
6.5 狀壓DP 145
6.5.1 狀態壓縮的方法 145
6.5.2 例題講解 145
6.6 期望DP 148
6.6.1 期望的性質和轉移 148
6.6.2 例題講解 149
6.7 樹形DP 156
6.7.1 樹形動態規劃介紹 156
6.7.2 自下而上樹形動態規劃 156
6.7.3 換根動態規劃 158
6.7.4 例題講解 161
第7章 圖論 168
7.1 圖的存儲方法 168
7.1.1 鄰接矩陣 168
7.1.2 鄰接表 169
7.1.3 鏈式前向星 170
7.2 圖上問題 172
7.2.1 圖的分類和性質 172
7.2.2 圖的遍歷方法 173
7.2.3 Dijkstra最短路徑 176
7.2.4 Bellman-Ford最短路徑 183
7.2.5 Johnson最短路徑 186
7.2.6 Floyd最短路徑 192
7.2.7 匈牙利算法 195
7.2.8 Tarjan算法 199
7.2.9 DAG-DP 206
7.3 樹上問題 210
7.3.1 樹的概念 210
7.3.2 最小生成樹 211
7.3.3 倍增LCA 214
7.3.4 例題講解 217
第8章 進階數據結構 221
8.1 單調棧 221
8.1.1 單調棧介紹 221
8.1.2 例題講解 222
8.2 單調隊列 224
8.2.1 單調隊列介紹 224
8.2.2 例題講解 226
8.3 ST表 231
8.3.1 ST表介紹 232
8.3.2 例題講解 232
8.4 樹狀數組 235
8.4.1 單點修改型樹狀數組 235
8.4.2 區間修改型樹狀數組 238
8.4.3 例題講解 238
8.5 線段樹 239
8.5.1 線段樹區間加法 240
8.5.2 線段樹的區間乘法、加法和賦值 243
8.5.3 例題講解 245
8.6 並查集 250
8.6.1 樸素並查集 250
8.6.2 並查集的路徑壓縮 251
8.6.3 並查集的啟發式合並 251
8.6.4 可撤銷並查集 253
8.6.5 例題講解 255
8.7 鏈表 258
8.7.1 數組實現雙向鏈表 258
8.7.2 例題講解 260
第9章 字符串 263
9.1 字符串匹配 263
9.1.1 樸素的字符串匹配算法 263
9.1.2 KMP算法 264
9.1.3 進制哈希 266
9.1.4 例題講解 269
9.2 迴文串 273
9.2.1 迴文串介紹 273
9.2.2 Manacher算法 275
9.2.3 例題講解 277
9.3 Trie樹(字典樹) 280
9.3.1 Trie樹介紹 280
9.3.2 字符Trie樹 282
9.3.3 01Trie樹 284
9.3.4 例題講解 286
第10章 數論 290
10.1 數論基礎 290
10.1.1 數論的討論範圍 290
10.1.2 整數除法的性質 290
10.1.3 取模運算的性質 291
10.2 唯一分解定理和約數定理 292
10.2.1 唯一分解定理 292
10.2.2 約數定理 292
10.2.3 因子分解和質因子分解 293
10.2.4 例題講解 294
10.3 最大公約數和最小公倍數 297
10.3.1 輾轉相除法 297
10.3.2 最大公約數和最小公倍數在唯一分解中的性質 298
10.3.3 例題講解 299
10.4 拓展歐幾里得 301
10.4.1 裴蜀定理 301
10.4.2 拓展歐幾里得算法 302
10.4.3 例題講解 304
10.5 快速冪 306
10.5.1 為什麽要用快速冪 306
10.5.2 快速冪的原理和模板 306
10.5.3 例題講解 307
10.6 乘法逆元 308
10.6.1 乘法逆元如何表示除法 309
10.6.2 費馬小定理求逆元 309
10.7 組合計數 310
10.7.1 分類加法和分步乘法 310
10.7.2 組合數 311
10.7.3 普通型生成函數 313
10.7.4 Lucas定理 316
10.7.5 例題講解 317
10.8 關於質數的判斷 322
10.8.1 單點質數判斷(試除法) 322
10.8.2 埃氏篩法 323
10.8.3 歐拉篩法 326
10.8.4 例題講解 327
10.9 歐拉函數 328
10.9.1 單點歐拉函數 328
10.9.2 篩法求歐拉函數 329
10.9.3 歐拉定理 332
10.9.4 歐拉降冪 333
10.9.5 例題講解 333
10.10 異或線性基 336
10.10.1 異或線性基的原理和性質 336
10.10.2 例題講解 339
第11章 博弈論 341
11.1 基礎博弈類型 341
11.1.1 Bash博弈 341
11.1.2 Nim博弈 342
11.1.3 例題講解 343
11.2 SG函數 346
11.2.1 mex運算 346
11.2.2 SG函數的定義和性質 346
11.2.3 子游戲的合並 348
11.2.4 SG函數打表 348
11.2.5 例題講解 348
11.3 反Nim博弈 350
11.3.1 反Nim博弈結論 350
11.3.2 結論的證明 351
11.3.3 例題講解 352
11.4 博弈雜題選講 353
第12章 高級算法策略與技巧 358
12.1 構造 358
12.1.1 構造的常見思維 358
12.1.2 例題講解 359
12.2 分塊思想 363
12.2.1 根號分塊優化 364
12.2.2 整除分塊 369
12.3 離散化 371
12.4 離線思想 374
12.5 莫隊算法 374
12.5.1 莫隊算法介紹 375
12.5.2 例題講解 376
12.6 CDQ分治 383
12.6.1 點對/區間相關問題 383
12.6.2 三維偏序問題 384
12.7 本章小結 388
第13章 真題選講 389
13.1 XCPC往年真題選講 389
13.2 NOI/NOIP往年真題選講 399
13.3 藍橋杯往年真題選講 421
13.4 天梯賽往年真題選講 428