1. 程式人生 > >著名的北郵ACM推薦50題

著名的北郵ACM推薦50題

POJ推薦50題
1、標記“難”和“稍難”的題目可以看看,思考一下,不做要求,當然有能力的同學可以直接切掉。
2、標記為A and B的題目是比較相似的題目,建議大家兩個一起做,可以對比總結,且二者算作一個題目。
3、列表中大約有70個題目。大家選做其中的50道,且每類題目有最低數量限制。
4、這裡不少題目在BUPT ACM FTP上面都有程式碼,請大家合理利用資源。
5、50個題目要求每個題目都要寫總結,養成良好的習慣。
6、這個列表的目的在於讓大家對各個方面的演算法有個瞭解,也許要求有些苛刻,教條,請大家諒解,這些是我們這些年的經驗總結,所以也請大家尊重我們的勞動成果。

第一類 動態規劃(至少6題,2479 and 2593必做)
2479 and 2593 1015 1042 (也可貪心) 1141 1050 1080 1221 1260 2411 (稍難) 1276
第二類 搜尋(至少4題)
1011 1033 1129 2049 2056 2488 2492 (稍難,也可並查集)
第三類 貪心(至少2題)
1065 2054 (難) 1521 2709
第四類 最短路(至少3題)
1062 1125 1797 2253 2679 Bellman-Ford (難)
第五類 最小生成樹(至少2題,而且Prim和Kruskal至少各用一次)
1251 1258 1789 2485
第六類 最大流(至少2題)
1087 1459 1149 2516 (最小費用最大流) (難)
第七類 二分圖(至少3題)
1325 1469 2195 (KM演算法或最小費用最大流) (難) 2446 1422 and 2594
第八類 並查集(至少2題)
1861 1182 (難) 1308 2524
第九類 快速查詢(B-Search, Hash and so on) (至少3題)
2503 2513 (+Euler迴路的判定) 1035 1200 2002
第十類 數論(至少2題)
1061 1142 2262 2407 1811(難) 2447 (難)
第十一類 線段樹(無最少題數要求)
2352 (可用簡單方法) 2528
第十二類 計算幾何(至少2題,1113凸包演算法必做)
1113 1292 2148 (難) 2653 1584
第十三類 高精度(至少3題,1001必做)
1001 1047 1131 1503 1504 1060 and 1996 (多項式) SCU1002, 1003, 1004 (http://acm.scu.edu.cn/soj)
第十四類 模擬(至少5題)
1029 and 1013 1083 and 2028 2234 and 1067 1012 1026 1068 1120 2271 2632
第十五類 數學(至少4題)
2249 1023 2506 1079 1019 and 1095 1905 and 1064 (二分)
OJ上的一些水題(可用來練手和增加自信)
(poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094)

初期:
一.基本演算法:
(1)列舉. (poj1753,poj2965)
(2)貪心(poj1328,poj2109,poj2586)
(3)遞迴和分治法.
(4)遞推.
(5)構造法.(poj3295)
(6)模擬法.(poj1068,poj2632,poj1573,poj2993,poj2996)
二.圖演算法:
(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)
(6)最大流的增廣路演算法(KM演算法). (poj1459,poj3436)
三.資料結構.
(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)

經典題集:
1000:會教會你如何使用一個線上的ONLINE JUDGE。

1001:這道題教會你如何使用高精度運算,並需要你考慮高位的實數,所以要記錄一下小數點的位置。

1002:簡單題,初步瞭解ACM中的模擬題。模擬題就是不需要什麼演算法的題目,只需要按照題目要求一步一步做。

1003——1008:簡單題,練習線上做題環境。

1012:約瑟夫問題的最簡單形式。

1013:簡單題。

1017:簡單題。

1019:數學+模擬

1023:簡單題。

1032:簡單題。

1045:簡單題。

1046:簡單題。

1051:簡單的字串模擬題,推薦新手做。

1054:麻煩的模擬題,用來熟悉語言環境。

1060:多項式模擬題。

1047:麻煩的數學模擬。

1050:基礎的DP。

1061:擴充套件歐幾里德演算法,經典題。

1067:簡單題。

1068:有時間的同學可選做。

1080:簡單的DP。

1083:簡單題。

1088:經典的DP。

1100:解方程題,有模板。

1102:模擬題,很練程式碼能力。

1106:計算幾何,入門題。

1132:簡單題。

1150:最後一位非0位是多少?從此題可學到這類問題的通用解法。

1159:比較簡單的DP,可以給你一個全新的思想。

1163:比較簡單的DP。

1166:簡單的模擬題。

1182

1183

1207

1218

1247 1298 1306 1308 1316 1317 1326 1331 1338 1363

1011:深度優先搜尋(以下簡稱DFS),可能需要花很長時間。值得多練。

1029:1013的升級版。

1014:貪心題?

1031:計算幾何

1458:經典的DP。

1401 1423 1426 1450 1455 1477 1488 1503 1504 1517

1035:字串+模擬,比較麻煩。

1037:經典的動態規劃(以下簡稱DP),難。

1038:經典DP,難。

1042:經典的貪心題。

1048:較繁的模擬題。

1519 1528 1543 1547 1552 1555 1565 1575 1580 1581

1065:經典的貪心題。

1077:非常經典的8數碼問題。

1091:高精度。

1095:卡特蘭數,組合數學題,較難。

1099:經典的模擬題。

1589 1598 1606 1656 1658 1663 1674 1702 1723 1731

1107:字串的模擬題。

1113:計算幾何,凸包+圓周長。

[概念:凸包:1)點集Q的凸包(convex hull)是指一個最小凸多邊形,滿足Q中的點或者在多邊形邊上或者在其內。下圖中由紅色線段表示的多邊形就是點集Q={p0,p1,...p12}的凸包。

2)一組平面上的點,求一個包含所有點的最小的凸多邊形,這就是凸包問題了。這可以形象地想成這樣:在地上放置一些不可移動的木樁,用一根繩子把他們儘量緊地圈起來,這就是凸包了。]

1141:經典的DP。

1147:需數學功底。

1149:經典的網路流。

1753 1775 1799 1844 1851 1862 1915 1922 1936 1953

1165:經典的搜尋題。

1177:經典的線段樹。

1182:並查集,較難。

1190:經典的搜尋+數學公式。

1191:數學性比較強的一道DP。

1969 1979 2000 2001 2007 2013 2017 2027 2039 2070

1201:差分約束,BELLMAN-FORD演算法。

1204:經典的字串自動機題目,難。

1286:POLYA定理的最簡單應用,組合數學。

1312:找規律的題目,需要打表計算。

1315:經典的DFS。