著名題單,最初來源不詳。直接來源:http://blog.csdn.net/a1dark/article/details/11714009
OJ上的一些水題(可用來練手和增加自信) (POJ 3299,POJ 2159,POJ 2739,POJ 1083,POJ 2262,POJ 1503,POJ 3006,POJ 2255,POJ 3094)
初期:
一.基本算法:
- 枚舉. (POJ 1753,POJ 2965)
- 貪心(POJ 1328,POJ 2109,POJ 2586)
- 遞歸和分治法.
- 遞推.
- 構造法.(POJ 3295)
- 模拟法.(POJ 1068,POJ 2632,POJ 1573,POJ 2993,POJ 2996)
二.圖算法:
- 圖的深度優先周遊和廣度優先周遊.
- 最短路徑算法(dijkstra,bellman-ford,floyd,heap+dijkstra) (POJ 1860,POJ 3259,POJ 1062,POJ 2253,POJ 1125,POJ 2240)
- 最小生成樹算法(prim,kruskal) (POJ 1789,POJ 2485,POJ 1258,POJ 3026)
- 拓撲排序 (POJ 1094)
- 二分圖的最大比對 (匈牙利算法) (POJ 3041,POJ 3020)
- 最大流的增廣路算法(KM算法). (POJ 1459,POJ 3436)
三.資料結構.
- 串 (POJ 1035,POJ 3080,POJ 1936)
- 排序(快排、歸并排(與逆序數有關)、堆排) (POJ 2388,POJ 2299)
- 簡單并查集的應用.
- 哈希表和二分查找等高效查找法(數的Hash,串的Hash) (POJ 3349,POJ 3274,POJ 2151,POJ 1840,POJ 2002,POJ 2503)
- 哈夫曼樹(POJ 3253)
- 堆
- trie樹(靜态建樹、動态建樹) (POJ 2513)
四.簡單搜尋
- 深度優先搜尋 (POJ 2488,POJ 3083,POJ 3009,POJ 1321,POJ 2251)
- 廣度優先搜尋(POJ 3278,POJ 1426,POJ 3126,POJ 3087.POJ 3414)
- 簡單搜尋技巧和剪枝(POJ 2531,POJ 1416,POJ 2676,POJ 1129)
五.動态規劃
- 背包問題. (POJ 1837,POJ 1276)
- 型如下表的簡單DP(可參考lrj的書 page149):
- E[j]=opt{D+w(i,j)} (POJ 3267,POJ 1836,POJ 1260,POJ 2533)
- E[i,j]=opt{D[i-1,j]+xi,D[i,j-1]+yj,D[i-1][j-1]+zij} (最長公共子序列) (POJ 3176,POJ 1080,POJ 1159)
- C[i,j]=w[i,j]+opt{C[i,k-1]+C[k,j]}.(最優二分檢索樹問題)
六.數學
- 組合數學:
- 加法原理和乘法原理.
- 排列組合.
- 遞推關系.
- (POJ 3252,POJ 1850,POJ 1019,POJ 1942)
- 數論.
- 素數與整除問題
- 進制位.
- 同餘模運算.
- (POJ 2635, POJ 3292,POJ 1845,POJ 2115)
- 計算方法.
- 二分法求解單調函數相關知識.(POJ 3273,POJ 3258,POJ 1905,POJ 3122)
七.計算幾何學.
- 幾何公式.
- 叉積和點積的運用(如線段相交的判定,點到線段的距離等). (POJ 2031,POJ 1039)
- 多邊型的簡單算法(求面積)和相關判定(點在多邊型内,多邊型是否相交) (POJ 1408,POJ 1584)
- 凸包. (POJ 2187,POJ 1113)
中級:
- C++的标準模版庫的應用. (POJ 3096,POJ 3007)
- 較為複雜的模拟題的訓練(POJ 3393,POJ 1472,POJ 3371,POJ 1027,POJ 2706)
- 差分限制系統的建立和求解. (POJ 1201,POJ 2983)
- 最小費用最大流(POJ 2516,POJ 2195)
- 雙連通分量(POJ 2942)
- 強連通分支及其縮點.(POJ 2186)
- 圖的割邊和割點(POJ 3352)
- 最小割模型、網絡流規約(POJ 3308)
- 線段樹. (POJ 2528,POJ 2828,POJ 2777,POJ 2886,POJ 2750)
- 靜态二叉檢索樹. (POJ 2482,POJ 2352)
- 樹狀樹組(POJ 1195,POJ 3321)
- RMQ. (POJ 3264,POJ 3368)
- 并查集的進階應用. (POJ 1703,POJ 2492)
- KMP算法. (POJ 1961,POJ 2406)
四.搜尋
- 最優化剪枝和可行性剪枝
- 搜尋的技巧和優化 (POJ 3411,POJ 1724)
- 記憶化搜尋(POJ 3373,POJ 1691)
- 較為複雜的動态規劃(如動态規劃解特别的施行商問題等) (POJ 1191,POJ 1054,POJ 3280,POJ 2029,POJ 2948,POJ 1925,POJ 3034)
- 記錄狀态的動态規劃. (POJ 3254,POJ 2411,POJ 1185)
- 樹型動态規劃(POJ 2057,POJ 1947,POJ 2486,POJ 3140)
-
- 容斥原理.
- 抽屜原理.
- 置換群與Polya定理(POJ 1286,POJ 2409,POJ 3270,POJ 1026).
- 遞推關系和母函數.
- 數學.
- 高斯消元法(POJ 2947,POJ 1487,POJ 2065,POJ 1166,POJ 1222)
- 機率問題. (POJ 3071,POJ 3440)
- GCD、擴充的歐幾裡德(中國剩餘定理) (POJ 3101)
-
- 0/1分數規劃. (POJ 2976)
- 三分法求解單峰(單谷)的極值.
- 矩陣法(POJ 3150,POJ 3422,POJ 3070)
- 疊代逼近(POJ 3301)
- 随機化算法(POJ 3318,POJ 2454)
- 雜題. (POJ 1870,POJ 3296,POJ 3286,POJ 1095)
- 坐标離散化.
- 掃描線算法(例如求矩形的面積和周長并,常和線段樹或堆一起使用). (POJ 1765,POJ 1177,POJ 1151,POJ 3277,POJ 2280,POJ 3004)
- 多邊形的核心(半平面交)(POJ 3130,POJ 3335)
- 幾何工具的綜合應用.(POJ 1819,POJ 1066,POJ 2043,POJ 3227,POJ 2165,POJ 3429)
進階:
一.基本算法要求:
- 代碼快速寫成,精簡但不失風格 (POJ 2525,POJ 1684,POJ 1421,POJ 1048,POJ 2050,POJ 3306)
- 保證正确性和高效性. POJ 3434
- 度限制最小生成樹和第K最短路. (POJ 1639)
- 最短路,最小生成樹,二分圖,最大流問題的相關理論(主要是模型建立和求解) (POJ 3155, POJ 2112,POJ 1966,POJ 3281,POJ 1087,POJ 2289,POJ 3216,POJ 2446 )
- 最優比率生成樹. (POJ 2728)
- 最小樹形圖(POJ 3164)
- 次小生成樹.
- 無向圖、有向圖的最小環
- trie圖的建立和應用. (POJ 2778)
-
LCA和RMQ問題(LCA(最近公共祖先問題) 有離線算法(并查集+dfs) 和 線上算法
(RMQ+dfs)).(POJ 1330)
-
雙端隊列和它的應用(維護一個單調的隊列,常常在動态規劃中起到優化狀态轉移
的目的). (POJ 2823)
- 左偏樹(可合并堆).
- 字尾樹(非常有用的資料結構,也是賽區考題的熱點). (POJ 3415,POJ 3294)
- 較麻煩的搜尋題目訓練(POJ 1069,POJ 3322,POJ 1475,POJ 1924,POJ 2049,POJ 3426)
-
廣搜的狀态優化:利用M進制數存儲狀态、轉化為串用hash表判重、按位壓縮存儲
狀态、雙向廣搜、A*算法. (POJ 1768,POJ 1184,POJ 1872,POJ 1324,POJ 2046,POJ 1482)
-
深搜的優化:盡量用位運算、一定要加剪枝、函數參數盡可能少、層數不易過大
、可以考慮雙向搜尋或者是輪換搜尋、IDA*算法. (POJ 3131,POJ 2870,POJ 2286)
- 需要用資料結構優化的動态規劃. (POJ 2754,POJ 3378,POJ 3017)
- 四邊形不等式理論.
- 較難的狀态DP(POJ 3133)
- 組合數學.
- MoBius反演(POJ 2888,POJ 2154)
- 偏序關系理論.
- 博奕論.
- 極大極小過程(POJ 3317,POJ 1085)
- Nim問題.
- 半平面求交(POJ 3384,POJ 2540)
- 可視圖的建立(POJ 2966)
- 點集最小圓覆寫.
- 對踵點(POJ 2079)
八.綜合題.
(POJ 3109,POJ 1478,POJ 1462,POJ 2729,POJ 2048,POJ 3336,POJ 3315,POJ 2148,POJ 1263)