0. C語言的基本語法(或者直接開C++也行,當一個java選手可能會更受歡迎,而且之後工做好找,可是難度有點大),【參考書籍:劉汝佳的《算法競賽入門經典》,C++入門能夠考慮《c++ primer plus》,java選手能夠考慮《think in java》or中文版《java編程思想》,請遠離譚浩強...】
能夠選擇切一些特別水的題鞏固以及適應一下ACM中常見的輸入輸出格式...例如杭電著名的100題 Problem Set
1. 一些基本算法和數據結構(隊列、棧、樹、圖、並查集、堆、DFS、BFS、最短路、最小生成樹、拓撲排序、動態規劃、貪心、搜索、KMP、哈希、Trie、AC自動機、快速冪、逆元、費馬小定理、歐拉函數、素數篩選、分解質因數)你能夠找兩個小夥伴一塊兒分工合做,各自認領專題【參考書籍:劉汝佳《算法競賽入門經典第二版》or《算法競賽訓練手冊》,《算法導論》】這時候能夠刷的題就多了,你能夠選擇一些專題進行突破,學習一下技巧。例如
[kuangbin帶你飛]專題一 簡單搜索
[kuangbin帶你飛]專題四 最短路練習
[kuangbin帶你飛]專題五 並查集
[kuangbin帶你飛]專題六 最小生成樹
[kuangbin帶你飛]專題十二 基礎DP1
[kuangbin帶你飛]專題十四 數論基礎
[kuangbin帶你飛]專題十六 KMP & 擴展KMP & Manacher
[kuangbin帶你飛]專題十七 AC自動機
若是這些你和你的小夥伴都能熟悉掌握,而且可以儘快寫出來,那麼沒有意外的話就能夠在網絡賽中拿到現場賽的門票(固然還得看出題人的風格...)。
2. 一些進階的算法以及複雜一些的數據結構(樹狀數組 線段樹 平衡樹 後綴數組 二分圖匹配 網絡流 費用流 割點 橋 強聯通 雙聯通 最近公共祖先 四大DP(數位dp 區間dp 狀壓dp 機率dp) 博弈論SG函數 )
【參考資料:各類博客......】
[kuangbin帶你飛]專題七 線段樹
[kuangbin帶你飛]專題九 連通圖
[kuangbin帶你飛]專題十 匹配問題
[kuangbin帶你飛]專題十一 網絡流
[kuangbin帶你飛]專題十五 數位DP
[kuangbin帶你飛]專題十八 後綴數組
[kuangbin帶你飛]專題二十一 機率&指望
[kuangbin帶你飛]專題二十二 區間DP
這些掌握以後在現場賽中拿到牌子應該就沒什麼問題了,發揮出色還能拿到銀牌。。。不過若是遇到比較兇殘的賽區...
2.5 這時候若是開始組隊了,就能夠去刷一些套題了,例如Contests - Virtual Judge
這裏每一場比賽都是過去真實發生的錄像,你能夠clone以後和本身的隊友一塊兒實操一下。php
3.更高深的技巧,更復雜的數據結構(樹鏈剖分,動態樹,可持久化線段樹,DLX,後綴自動機,迴文樹,斜率優化/單調隊列優化/四邊形優化DP,插頭dp,莫比烏斯反演......)
這部分最能體現人與人的差別了...智商碾壓通常就在這部分。而要想拿到金牌,通常來講這些知識都要儘量掌握。
【參考資料:各類論文,解題報告】
這部分的題目比較雜,所以請自行去vjudge上查找....java
3.5 同2.5,而且中國國內的比賽若是已經知足不了你,你能夠去https://icpcarchive.ecs.baylor.edu/index.php 或者Gym - Codeforces上找到全世界的區域賽的題目,不過題解就不怎麼保證了...c++
也許你會以爲性價比很低,學這麼多東西,才"有可能」拿到牌子,可是收穫的不必定是物質的牌子,還有學習過程的苦辣酸甜的經歷(例如各類WA TLE RE MLE 以後的一次AC),還有和基友一塊兒並肩做戰切套題的患難與共,並且還鍛鍊了本身的學習能力(善用百度,谷歌,維基百科)。
因此
Good Luck and Have Fun.算法