(1)枚舉. (poj1753,poj2965)
(2)貪心(poj1328,poj2109,poj2586)
(3)遞歸和分治法.
(4)遞推.
(5)構造法.(poj3295)
(6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)php
(1)圖的深度優先遍歷和廣度優先遍歷.
(2)最短路徑算法(dijkstra,bellman-ford,floyd,heap+dijkstra)
(poj1860,poj3259,poj1062,poj2253,poj1125,poj2240)
(3)最小生成樹算法(prim,kruskal)
(poj1789,poj2485,poj1258,poj3026)
(4)拓撲排序 (poj1094)
(5)二分圖的最大匹配 (匈牙利算法) (poj3041,poj3020)html
(6)最大流的增廣路算法(KM算法). (poj1459,poj3436)linux
(1)串 (poj1035,poj3080,poj1936)
(2)排序(快排、歸併排(與逆序數有關)、堆排) (poj2388,poj2299)
(3)簡單並查集的應用.
(4)哈希表和二分查找等高效查找法(數的Hash,串的Hash)
(poj3349,poj3274,POJ2151,poj1840,poj2002,poj2503)
(5)哈夫曼樹(poj3253)
(6)堆
(7)trie樹(靜態建樹、動態建樹) (poj2513)算法
(1)深度優先搜索 (poj2488,poj3083,poj3009,poj1321,poj2251)
(2)廣度優先搜索(poj3278,poj1426,poj3126,poj3087.poj3414)
(3)簡單搜索技巧和剪枝(poj2531,poj1416,poj2676,1129)數組
(1)揹包問題. (poj1837,poj1276)
(2)型以下表的簡單DP(可參考lrj的書 page149):
1.E[j]=opt{D[i]+w(i,j)} (poj3267,poj1836,poj1260,poj2533)
2.E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最長公共子序列)
(poj3176,poj1080,poj1159)
3.C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最優二分檢索樹問題)服務器
(1)組合數學:
1.加法原理和乘法原理.
2.排列組合.
3.遞推關係.
(POJ3252,poj1850,poj1019,poj1942)
(2)數論.
1.素數與整除問題
2.進制位.
3.同餘模運算.
(poj2635, poj3292,poj1845,poj2115)
(3)計算方法.
1.二分法求解單調函數相關知識.(poj3273,poj3258,poj1905,poj3122)網絡
(1)幾何公式.
(2)叉積和點積的運用(如線段相交的斷定,點到線段的距離等). (poj2031,poj1039)
(3)多邊型的簡單算法(求面積)和相關斷定(點在多邊型內,多邊型是否相交)
(poj1408,poj1584)
(4)凸包. (poj2187,poj1113)數據結構
(1)C++的標準模版庫的應用. (poj3096,poj3007)
(2)較爲複雜的模擬題的訓練(poj3393,poj1472,poj3371,poj1027,poj2706)函數
(1)差分約束系統的創建和求解. (poj1201,poj2983)
(2)最小費用最大流(poj2516,poj2516,poj2195)
(3)雙連通份量(poj2942)
(4)強連通分支及其縮點.(poj2186)
(5)圖的割邊和割點(poj3352)
(6)最小割模型、網絡流規約(poj3308, )工具
(1)線段樹. (poj2528,poj2828,poj2777,poj2886,poj2750)
(2)靜態二叉檢索樹. (poj2482,poj2352)
(3)樹狀樹組(poj1195,poj3321)
(4)RMQ. (poj3264,poj3368)
(5)並查集的高級應用. (poj1703,2492)
(6)KMP算法. (poj1961,poj2406)
(1)最優化剪枝和可行性剪枝
(2)搜索的技巧和優化 (poj3411,poj1724)
(3)記憶化搜索(poj3373,poj1691)
(1)較爲複雜的動態規劃(如動態規劃解特別的施行商問題等)
(poj1191,poj1054,poj3280,poj2029,poj2948,poj1925,poj3034)
(2)記錄狀態的動態規劃. (POJ3254,poj2411,poj1185)
(3)樹型動態規劃(poj2057,poj1947,poj2486,poj3140)
(1)組合數學:
1.容斥原理.
2.抽屜原理.
3.置換羣與Polya定理(poj1286,poj2409,poj3270,poj1026).
4.遞推關係和母函數.
(2)數學.
1.高斯消元法(poj2947,poj1487, poj2065,poj1166,poj1222)
2.機率問題. (poj3071,poj3440)
3.GCD、擴展的歐幾里德(中國剩餘定理) (poj3101)
(3)計算方法.
1.0/1分數規劃. (poj2976)
2.三分法求解單峯(單谷)的極值.
3.矩陣法(poj3150,poj3422,poj3070)
4.迭代逼近(poj3301)
(4)隨機化算法(poj3318,poj2454)
(5)雜題.
(poj1870,poj3296,poj3286,poj1095)
(1)座標離散化.
(2)掃描線算法(例如求矩形的面積和周長並,常和線段樹或堆一塊兒使用).
(poj1765,poj1177,poj1151,poj3277,poj2280,poj3004)
(3)多邊形的內核(半平面交)(poj3130,poj3335)
(4)幾何工具的綜合應用.(poj1819,poj1066,poj2043,poj3227,poj2165,poj3429)
(1)代碼快速寫成,精簡但不失風格
(poj2525,poj1684,poj1421,poj1048,poj2050,poj3306)
(2)保證正確性和高效性. poj3434
(1)度限制最小生成樹和第K最短路. (poj1639)
(2)最短路,最小生成樹,二分圖,最大流問題的相關理論(主要是模型創建和求解)
(poj3155, poj2112,poj1966,poj3281,poj1087,poj2289,poj3216,poj2446
(3)最優比率生成樹. (poj2728)
(4)最小樹形圖(poj3164)
(5)次小生成樹.
(6)無向圖、有向圖的最小環
(1)trie圖的創建和應用. (poj2778)
(2)LCA和RMQ問題(LCA(最近公共祖先問題) 有離線算法(並查集+dfs) 和 在線算法
(RMQ+dfs)).(poj1330)
(3)雙端隊列和它的應用(維護一個單調的隊列,經常在動態規劃中起到優化狀態轉移的
目的). (poj2823)
(4)左偏樹(可合併堆).
(5)後綴樹(很是有用的數據結構,也是賽區考題的熱點).
(poj3415,poj3294)
(1)較麻煩的搜索題目訓練(poj1069,poj3322,poj1475,poj1924,poj2049,poj3426)
(2)廣搜的狀態優化:利用M進制數存儲狀態、轉化爲串用hash表判重、按位壓縮存儲狀態、雙向廣搜、A*算法. (poj1768,poj1184,poj1872,poj1324,poj2046,poj1482)
(3)深搜的優化:儘可能用位運算、必定要加剪枝、函數參數儘量少、層數不易過大、能夠考慮雙向搜索或者是輪換搜索、IDA*算法. (poj3131,poj2870,poj2286)
(1)須要用數據結構優化的動態規劃.
(poj2754,poj3378,poj3017)
(2)四邊形不等式理論.
(3)較難的狀態DP(poj3133)
(1)組合數學.
1.MoBius反演(poj2888,poj2154)
2.偏序關係理論.
(2)博奕論.
1.極大極小過程(poj3317,poj1085)
2.Nim問題.
(1)半平面求交(poj3384,poj2540)
(2)可視圖的創建(poj2966)
(3)點集最小圓覆蓋.
(4)對踵點(poj2079)
八.綜合題.
(poj3109,poj1478,poj1462,poj2729,poj2048,poj3336,poj3315,poj2148,poj1263)
<1>青蛙過河問題
<2>利用區間dp
<1> 0-1揹包,經典問題
<2>無限揹包,經典問題
<3>斷定性揹包問題
<4>帶附屬關係的揹包問題
<5> + -1揹包問題
<6>雙揹包求最優值
<7>構造三角形問題
<8>帶上下界限制的揹包問題(012揹包)
<1>積木遊戲問題
<2>決鬥(斷定性問題)
<3>圓的最大多邊形問題
<4>統計單詞個數問題
<5>棋盤分割
<6>日程安排問題
<7>最小逼近問題(求出兩數之比最接近某數/兩數之和等於某數等等)
<8>方塊消除遊戲(某區間能夠連續消去求最大效益)
<9>資源分配問題
<10>數字三角形問題
<11>漂亮的打印
<12>郵局問題與構造答案
<13>最高積木問題
<14>兩段連續和最大
<15>2次冪和問題
<16>N個數的最大M段子段和
<17>交叉最大數問題
<1>模K問題的dp
<2>特殊的模K問題,求最大(最小)模K的數
<3>變換數問題
<1>1-SUM問題
<2>2-SUM問題
<3>序列劃分問題(單調隊列優化)
<1>凸多邊形的三角剖分問題
<2>乘積最大問題
<3>多邊形遊戲(多邊形邊上是操做符,頂點有權值)
<4>石子合併(N^3/N^2/NLogN各類優化)
<1>最優裝載問題
<2>部分揹包問題
<3>乘船問題
<4>貪心策略
<5>雙機調度問題Johnson算法
<1>牛仔射擊問題(博弈類)
<2>哈密頓路徑的狀態dp
<3>兩支點天平平衡問題
<4>一個有向圖的最接近二部圖
<1>完美服務器問題(每一個節點有3種狀態)
<2>小胖守皇宮問題
<3>網絡收費問題
<4>樹中漫遊問題
<5>樹上的博弈
<6>樹的最大獨立集問題
<7>樹的最大平衡值問題
<8>構造樹的最小環
ACM經常使用算法及練習
第一階段:練經典經常使用算法,下面的每一個算法給我打上十到二十遍,同時本身精簡代碼,
由於太經常使用,因此要練到寫時不用想,10-15分鐘內打完,甚相當掉顯示器均可以把程序打
出來.
1.最短路(Floyd、Dijstra,BellmanFord)
2.最小生成樹(先寫個prim,kruscal要用並查集,很差寫)
3.大數(高精度)加減乘除
4.二分查找. (代碼可在五行之內)
5.叉乘、判線段相交、而後寫個凸包.
6.BFS、DFS,同時熟練hash表(要熟,要靈活,代碼要簡)
7.數學上的有:展轉相除(兩行內),線段交點、多角形面積公式.
8. 調用系統的qsort, 技巧不少,慢慢掌握.
9. 任意進制間的轉換
第二階段:練習複雜一點,但也較經常使用的算法。
如:
1. 二分圖匹配(匈牙利),最小路徑覆蓋
2. 網絡流,最小費用流。
3. 線段樹.
4. 並查集。
5. 熟悉動態規劃的各個典型:LCS、最長遞增子串、三角剖分、記憶化dp
6.博弈類算法。博弈樹,二進制法等。
7.最大團,最大獨立集。
8.判斷點在多邊形內。
9. 差分約束系統.
10. 雙向廣度搜索、A*算法,最小耗散優先.
1. 比賽中評測會有些慢,偶爾還會碰到隔10分鐘以上才返回結果的狀況,這段時間不能等結果,必須開工其餘題,若是WA,兩道題同時作。交完每道題都要先打印。
2. 比賽時發的飯不是讓你當時就吃的,那是給你賽後吃的。基本上比賽中前幾名的隊都沒人吃,除非領先不少。
3. 不少選手,尤爲是第一次參加比賽的,到一個新環境,全當旅遊了,參觀的參觀,找同窗的找同窗,玩玩樂樂就把正事拋到腦後了,結果比賽天然沒什麼好成績,這樣的例子太多了。因此到參賽地後要時刻不忘本身是來比賽的,好好休息、備戰。
4. 參賽前一天要睡10個小時以上,很是有助於保持比賽中的精力,不少時候比賽到3個多小時隊員就沒勁了就是這個緣由。前一天晚飯與當天早飯要吃好,理由同上,要知道下頓飯得下午3點賽後才能吃。
5. 到新環境,時刻注意遠離疾病,感冒腸炎病不大,倒是成績的天敵。
6. 英語很差,看不懂的,要勤查詞典,懶一次就少一道題,遠離獎牌。
7. 能夠緊張,杜絕慌張,慌張是出題的敵人,任什麼時候候,若是發現本身或者隊友出現慌張的狀況,提醒深呼吸。
8. 照着紙敲代碼和sample數據時不要敲錯,特別注意文字信息。
9. 第一道簡單題交給隊中最穩的人作,萬一遇到麻煩也不要慌,若是有不少隊都出了就更沒必要着急了,它一定是簡單題,一定是能夠很快作出來的,晚幾分鐘也比罰掉20分好。另外注意不要PE。
10. 最後一小時是出題高峯,誰鬆懈,誰落後。最後一小時出一道是正常,出兩道更好。
11. 不管是否有人經過,全部題必須全讀過,最好每道題都有兩人以上讀過,儘可能杜絕講題現象。要徹底弄清題意,正確的判斷出題目的難易,不要想固然。
12. 雖然討論有助於出題,可是以往每賽區第一名基本都是各自爲戰,可是互相瞭解,以爲一道題適合其餘人作就轉手。
13. 保持頭腦靈活,在正常方法不行時想一想歪門邪道,好比換種不常見的特殊的數據結構,加預處理,限時搜索等。效率是第一位的,若是以爲DP麻煩就用記憶化搜索,總之考慮清楚後就要在最短期出題。
14. 競賽中更須要比平時穩定,程序出來後要檢查重點地方,儘可能1Y。對於WA的題,不要改一處就交,極可能還有錯的地方,要穩,要懂得在壓力下也要仔細。對WA的題測試時要完整,必須每一個點都測到,但不必定特別複雜。要考慮到測試的各類邊界狀況,好比矩陣可能爲1*1或1*n或m*1。
15. 除非作出的人不少,不然最後考慮複雜幾何題,精度形成的問題太多了。對double型操做要當心判斷大小、絕對值等狀況。通常狀況下不要用float型。
16. 塊複製要當心,檢查相應的部分是否已經正確修改。
17. 紙上寫程序要儘可能完整,每道題上機時間(包括輸入、測試和調試)不要超過一小時。程序出錯若是一時沒法排除就應該打印出來閱讀而把機器讓出來。
18. 提交時注意題號,不要交錯題。因爲PC^2的界面,這種狀況時有發生。
19. 儘量想到題目能夠用到的數學的東西。
20. 初始化必不可少。
21. 數組行列下標不要弄反,位運算或字符串哪頭是0和n不要搞反。
22. 提交時記得把全部的調試信息都關掉。
23. 實在無可奈何纔可換人作題。
24. 有想法後,寫程序以前想好時空效率。比賽中通常不會出現時限30秒以上的題(國外賽區除外),10秒及以上的通常不會超過3道。
25. 競賽機會每一年只有一次,訓練了很長時間,若是比賽中出現疏失,那麼從此一年都會後悔。對於不許備明年參賽的同窗,更是要珍惜最後一次參賽機會。
《組隊賽說明》
1 要有作題比較多的隊員,對於各類題型都有所涉及,作題穩,通常對前兩道簡單題可以保證快速,而且99%以上一次AC。
2 要有人專門應付數學與幾何題,但複雜的幾何題要放在最後作,對一些經常使用的函數要有模版準備。如精度控制,叉積,凸包等。
3 要有人可以對付麻煩的題,並保證必定的經過率,大多數的比賽都至少有一道這樣的題,如 POJ 1913,TOJ 1092。
4 要有人對DP很是之熟,單次、雙次、相對等狀況都不在話下。對經典DP手到擒來。
5 要有人對稀奇古怪的算法都作過程序,涉獵廣,對於數論、圖論中的一些特殊結論都知道。如 TOJ 1584,ZOJ 1015,UVA 10733。
6 要有人對複雜的通用算法作過程序,如網絡流中的最小費用最大流等等一系列的流,求割點/割邊,啓發式搜索/搏弈等。
7 模版要本身寫,而且另兩我的都認真讀過,用以往題目進行屢次的測試。模版要全,但要控制篇幅,由於不少賽區已開始限制頁數。
8 要有人對 linux/vi/gcc 系統熟悉,對PC^2熟悉,必定注意正式比賽時不要出現提交錯題的狀況。另外也要試用Dev-C++等Windows下的免費軟件。總之熟悉比賽環境。
9 每次練習賽都要看成正式比賽來作,要確保全部的題都看過,賽後要把沒作出來的題儘可能補上。
10 可能的話多看看以往比賽的總結、照片和錄象,縮短與正式競賽的距離,避免正式競賽時緊張得作不出題等狀況。
最好的狀況就是對於各類題目三個隊員都能作,可是又各有側重。
要保證出來一道題可以有人會作、敢作,至少也要知道作法。
三人分讀題目,切記每開始閱讀一個新的題目時必定告訴隊友,做上標記,以防重複閱讀,浪費資源;
開局並不是須要一個隊員負責調整 IDE,打開 PC^2,寫好頭文件甚至一些經常使用模板。
有隊伍過了 X 題: 將被過掉的題目(一般很快就被 AC 的題目爲水題,但也有意外狀況)交由團隊中發揮最爲穩定的選手閱讀並嘗試 Coding。若遇此題已被閱讀的狀況,已讀題目的選手深刻嘗試得出解題算法,若是有自信便直接開始 Coding,比賽中比較忌諱題意轉述。
這道水題我能作:
注意,評測結果返回可能會很是緩慢,其間切勿等待,繼續嘗試其餘題目
這個時間段是新手隊伍的疲軟期,也是強隊開始爆發拉開差距的時候
關於午飯:主辦方發的午飯儘可能不吃,以節約時間;容易空腹感太重的隊員我推薦: 士力架,你值得擁有
在這個時候全部隊員應該根據場上形勢斷定過題目標定位,根據本身的實力和每一個題目的進度以及經過狀況決定是否採起全員集火策略。最後 1h 封榜後事過題高峯期,注意留意場上氣球變化,留意是否有某種顏色的氣球在場上爆增的狀況,控制心態,毫不言棄,就算最後幾分鐘想出一個題目的算法,也有可能爆發編碼將其過掉衝刺階段(最後 15min),當時的 Coder 能夠根據本身的我的習慣要求隊友離場以下降心理壓力,可使用題目密封信封遮蓋電腦上的時間顯示方便全力衝刺