相信每一位玩ACM程序設(shè)計(jì)競(jìng)賽的同學(xué)來(lái)說(shuō)膀藐,都有一個(gè)從入門(mén)到精通的過(guò)程征峦,而且分享他們經(jīng)驗(yàn)的時(shí)候,見(jiàn)到最多的就是一種合作和拼搏精神消请,樂(lè)在其中的那種激情栏笆。
Wilbert即將畢業(yè),作為一個(gè)菜鳥(niǎo)級(jí)的入門(mén)玩家臊泰,一直很想知道如何能在程序設(shè)計(jì)競(jìng)賽中成為一個(gè)高手蛉加。即將無(wú)緣類(lèi)似競(jìng)賽的我,終于整理出了一些程序設(shè)計(jì)競(jìng)賽ACM訓(xùn)練之道缸逃,愿與大家分享针饥。
首先是編程的能力,一般要做到50行以?xún)?nèi)的程序不用調(diào)試需频、100行以?xún)?nèi)的二分鐘內(nèi)調(diào)試成功丁眼。
訓(xùn)練過(guò)ACM等程序設(shè)計(jì)競(jìng)賽的人在算法上有較大的優(yōu)勢(shì),這就說(shuō)明當(dāng)你編程能力提高之后昭殉,主要時(shí)間是花在思考算法上苞七,不是花在寫(xiě)程序與debug上藐守。
第一階段:練經(jīng)典常用算法,下面的每個(gè)算法給我打上十到二十遍蹂风,同時(shí)自己精簡(jiǎn)代碼卢厂,因?yàn)樘S茫砸毜綄?xiě)時(shí)不用想惠啄,10-15分鐘內(nèi)打完慎恒。
1.最短路(Floyd、Dijstra撵渡、BellmanFord)融柬;
2.最小生成樹(shù)(先寫(xiě)個(gè)prim,kruscal要用并查集趋距,不好寫(xiě))粒氧;
3.大數(shù)(高精度)加減乘除;
4.二分查找(代碼可在五行以?xún)?nèi))棚品;
5.叉乘靠欢、判線段相交、然后寫(xiě)個(gè)凸包铜跑;
6.BFS门怪、DFS,同時(shí)熟練hash表(要熟锅纺,要靈活,代碼要簡(jiǎn))掷空;
7.?dāng)?shù)學(xué)上的有:輾轉(zhuǎn)相除(兩行內(nèi)),線段交點(diǎn)囤锉、多角形面積公式坦弟;
8.調(diào)用系統(tǒng)的qsort, 技巧很多,慢慢掌握官地;
9.任意進(jìn)制間的轉(zhuǎn)換......
第二階段:練習(xí)復(fù)雜一點(diǎn)酿傍,但也較常用的算法。 如:
1.二分圖匹配(匈牙利)驱入,最小路徑覆蓋赤炒;
2.網(wǎng)絡(luò)流,最小費(fèi)用流亏较;
3.線段樹(shù)莺褒;
4 . 并查集;
5.熟悉動(dòng)態(tài)規(guī)劃的各個(gè)典型:LCS雪情、最長(zhǎng)遞增子串遵岩、三角剖分、記憶化dp巡通;
6.博弈類(lèi)算法尘执。博弈樹(shù)舍哄,二進(jìn)制法;
7.最大團(tuán)正卧,最大獨(dú)立集蠢熄;
8.判斷點(diǎn)在多邊形內(nèi)跪解;
9.差分約束系統(tǒng)炉旷;
10.雙向廣度搜索、A*算法叉讥,最小耗散優(yōu)先......
算法書(shū)有很多可以參考:
1窘行、Concrete Mathematics --- A Foundation For Computer ScienceRonald L. Graham , Donald E. Knuth 图仓, Oren Patashnik
這本書(shū)《具體數(shù)學(xué)》是Stanford計(jì)算機(jī)系的教材(1970 年開(kāi)始給研究生授課)罐盔,書(shū)的內(nèi)容是Knuth的巨著TAOCP第一章的擴(kuò)展,涉及了計(jì)算機(jī)科學(xué)領(lǐng)域內(nèi)幾乎所有可能遇到的數(shù)學(xué)知識(shí)救崔。書(shū)中許多經(jīng)典問(wèn)題的解答比目前廣泛流傳的解法更易懂惶看。對(duì)于提高大家的數(shù)學(xué)修養(yǎng)有很大幫助。
2六孵、Introduction to AlgorithmsThomas H. Cormen 纬黎,Charles E. Leiserson ,Ronald L. Rivest 劫窒,Clifford Stein
《算法導(dǎo)論》MIT計(jì)算機(jī)系的經(jīng)典算法教材本今。作者Rivest獲得過(guò)ACM Turing Award,牛主巍!本書(shū)內(nèi)容全面冠息,語(yǔ)言通俗,很適合大家入門(mén)孕索。
3逛艰、實(shí)用算法的分析和程序設(shè)計(jì),吳文虎 王建德
大名鼎鼎的“黑書(shū)”搞旭。內(nèi)容包括了競(jìng)賽需要的各種算法散怖,各種層次的讀者都適合。
4选脊、網(wǎng)絡(luò)算法與復(fù)雜性理論謝政 李建平
內(nèi)容很豐富的圖論教材
5杭抠、算法+數(shù)據(jù)結(jié)構(gòu)=程序N.Wirth
Pascal語(yǔ)言的發(fā)明人Wirth教授的名著,深入闡述了算法與數(shù)據(jù)結(jié)構(gòu)的關(guān)系恳啥,對(duì)每個(gè)算法都提供詳細(xì)的Pascal源程序偏灿,適合各種水平的讀者。
一.動(dòng)態(tài)規(guī)劃
參考資料:
劉汝佳《算法藝術(shù)與信息學(xué)競(jìng)賽》《算法導(dǎo)論》
推薦題目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1141
簡(jiǎn)單
http://acm.pku.edu.cn/JudgeOnline/problem?id=2288
中等钝的,經(jīng)典TSP問(wèn)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=2411
中等翁垂,狀態(tài)壓縮DP
http://acm.pku.edu.cn/JudgeOnline/problem?id=1112
中等
http://acm.pku.edu.cn/JudgeOnline/problem?id=1848
中等铆遭,樹(shù)形DP⊙夭拢可參考《算法藝術(shù)與信息學(xué)競(jìng)賽》動(dòng)態(tài)規(guī)劃一節(jié)的樹(shù)狀模型
http://acm.zju.edu.cn/show_problem.php?pid=1234
中等枚荣,《算法藝術(shù)與信息學(xué)競(jìng)賽》中的習(xí)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=1947
中等,《算法藝術(shù)與信息學(xué)競(jìng)賽》中的習(xí)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=1946
中等啼肩,《算法藝術(shù)與信息學(xué)競(jìng)賽》中的習(xí)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=1737
中等橄妆,遞推
http://acm.pku.edu.cn/JudgeOnline/problem?id=1821
中等,需要減少冗余計(jì)算
http://acm.zju.edu.cn/show_problem.php?pid=2561
中等祈坠,四邊形不等式的簡(jiǎn)單應(yīng)用
http://acm.pku.edu.cn/JudgeOnline/problem?id=1038
較難害碾,狀態(tài)壓縮DP,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1390
較難赦拘,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=3017
較難慌随,需要配合數(shù)據(jù)結(jié)構(gòu)優(yōu)化(我的題目_)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1682
較難,寫(xiě)起來(lái)比較麻煩
http://acm.pku.edu.cn/JudgeOnline/problem?id=2047
較難
http://acm.pku.edu.cn/JudgeOnline/problem?id=2152
難躺同,樹(shù)形DP
http://acm.pku.edu.cn/JudgeOnline/problem?id=3028
難阁猜,狀態(tài)壓縮DP,題目很有意思
http://acm.pku.edu.cn/JudgeOnline/problem?id=3124
難
http://acm.pku.edu.cn/JudgeOnline/problem?id=2915
非常難
二.搜索
參考資料:
劉汝佳《算法藝術(shù)與信息學(xué)競(jìng)賽》
推薦題目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=1011
簡(jiǎn)單蹋艺,深搜入門(mén)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=1324
中等剃袍,廣搜
http://acm.pku.edu.cn/JudgeOnline/problem?id=2044
中等,廣搜
http://acm.pku.edu.cn/JudgeOnline/problem?id=2286
較難车海,廣搜
http://acm.pku.edu.cn/JudgeOnline/problem?id=1945
難笛园,IDA,迭代加深搜索侍芝,需要較好的啟發(fā)函數(shù)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2449
難研铆,可重復(fù)K最短路,A州叠】煤欤可參考解題報(bào)告:
http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1144
http://acm.pku.edu.cn/JudgeOnline/problem?id=1190
難,深搜剪枝咧栗,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1084
難逆甜,《算法藝術(shù)與信息學(xué)競(jìng)賽》習(xí)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=2989
難,深搜
http://acm.pku.edu.cn/JudgeOnline/problem?id=1167
較難致板,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1069
很難
三. 常用數(shù)據(jù)結(jié)構(gòu)
參考資料:
劉汝佳《算法藝術(shù)與信息學(xué)競(jìng)賽》
《算法導(dǎo)論》
線段樹(shù)資料:
http://home.ustc.edu.cn/~zhuhcheng/ACM/segment_tree.pdf
樹(shù)狀數(shù)組資料
http://home.ustc.edu.cn/~zhuhcheng/ACM/tree.ppt
關(guān)于線段樹(shù)和樹(shù)狀數(shù)組更多相關(guān)內(nèi)容可在網(wǎng)上搜到
后綴數(shù)組資料
http://home.ustc.edu.cn/~zhuhcheng/ACM/suffix_array.pdf
http://home.ustc.edu.cn/~zhuhcheng/ACM/linear_suffix.pdf
推薦題目
http://acm.pku.edu.cn/JudgeOnline/problem?id=2482
較難交煞,線段樹(shù)應(yīng)用,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1151
簡(jiǎn)單斟或,線段樹(shù)應(yīng)用矩形面積并素征,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=3225
較難,線段樹(shù)應(yīng)用,可參考解題報(bào)告
http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1233
http://acm.pku.edu.cn/JudgeOnline/problem?id=2155
難御毅,二維樹(shù)狀數(shù)組根欧。
http://acm.pku.edu.cn/JudgeOnline/problem?id=2777
中等,線段樹(shù)應(yīng)用端蛆。
http://acm.pku.edu.cn/JudgeOnline/problem?id=2274
難凤粗,堆的應(yīng)用,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.zju.edu.cn/show_problem.php?pid=2334
中等今豆,左偏樹(shù)嫌拣,二項(xiàng)式堆或其他可合并堆的應(yīng)用。
左偏樹(shù)參考 http://www.nist.gov/dads/HTML/leftisttree.html
二項(xiàng)式堆參見(jiàn)《算法導(dǎo)論》相關(guān)章節(jié)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1182
中等晚凿,并查集
http://acm.pku.edu.cn/JudgeOnline/problem?id=1816
中等亭罪,字典樹(shù)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2778
較難瘦馍,多串匹配樹(shù)
參考: http://home.ustc.edu.cn/~zhuhcheng/ACM/zzy2004.pdf
http://acm.pku.edu.cn/JudgeOnline/problem?id=1743
難歼秽,后綴數(shù)組
http://acm.pku.edu.cn/JudgeOnline/problem?id=2774
較難,最長(zhǎng)公共子串情组,經(jīng)典問(wèn)題燥筷,后綴數(shù)組
http://acm.pku.edu.cn/JudgeOnline/problem?id=2758
很難,后綴數(shù)組
可參考解題報(bào)告
http://acm.pku.edu.cn/JudgeOnline/showcontest?contest_id=1178
http://acm.pku.edu.cn/JudgeOnline/problem?id=2448
很難院崇,數(shù)據(jù)結(jié)構(gòu)綜合運(yùn)用
四.圖論基礎(chǔ)
參考資料:
劉汝佳《算法藝術(shù)與信息學(xué)競(jìng)賽》《算法導(dǎo)論》《網(wǎng)絡(luò)算法與復(fù)雜性理論》謝政
推薦題目:
http://acm.pku.edu.cn/JudgeOnline/problem?id=2337
簡(jiǎn)單肆氓,歐拉路
http://acm.pku.edu.cn/JudgeOnline/problem?id=3177
中等,無(wú)向圖割邊
http://acm.pku.edu.cn/JudgeOnline/problem?id=2942
較難底瓣,無(wú)向圖雙連通分支
http://acm.pku.edu.cn/JudgeOnline/problem?id=1639
中等谢揪,最小度限制生成樹(shù),《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=2728
中等捐凭,最小比率生成樹(shù)拨扶,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=3013
簡(jiǎn)單,最短路問(wèn)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=1275
中等茁肠,差分約束系統(tǒng)患民,Bellman-Ford求解,《算法藝術(shù)與信息學(xué)競(jìng)賽》中有解答
http://acm.pku.edu.cn/JudgeOnline/problem?id=1252
簡(jiǎn)單垦梆,Bellman-Ford
http://acm.pku.edu.cn/JudgeOnline/problem?id=1459
中等匹颤,網(wǎng)絡(luò)流
http://acm.pku.edu.cn/JudgeOnline/problem?id=2391
較難,網(wǎng)絡(luò)流
http://acm.pku.edu.cn/JudgeOnline/problem?id=1325
中等托猩,二部圖最大匹配
http://acm.pku.edu.cn/JudgeOnline/problem?id=2226
較難印蓖,二部圖最大匹配
http://acm.pku.edu.cn/JudgeOnline/problem?id=2195
中等,二部圖最大權(quán)匹配
KM算法參考《網(wǎng)絡(luò)算法與復(fù)雜性理論》
http://acm.pku.edu.cn/JudgeOnline/problem?id=2516
較難京腥,二部圖最大權(quán)匹配
http://acm.pku.edu.cn/JudgeOnline/problem?id=1986
中等赦肃,LCA(最近公共祖先)問(wèn)題
參考Tarjan's LCA algorithm 《算法導(dǎo)論》第21章習(xí)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=2723
較難,2-SAT問(wèn)題
參考:http://home.ustc.edu.cn/~zhuhcheng/ACM/2-SAT.PPT
http://acm.pku.edu.cn/JudgeOnline/problem?id=2749
較難,2-SAT問(wèn)題
http://acm.pku.edu.cn/JudgeOnline/problem?id=3164
較難摆尝,最小樹(shù)形圖
參考《網(wǎng)絡(luò)算法與復(fù)雜性理論》中朱-劉算法
五.數(shù)論及組合計(jì)數(shù)基礎(chǔ)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1811
簡(jiǎn)單温艇,素?cái)?shù)判定,大數(shù)分解
參考算法導(dǎo)論相關(guān)章節(jié)
http://acm.pku.edu.cn/JudgeOnline/problem?id=2888
較難堕汞,Burnside引理
http://acm.pku.edu.cn/JudgeOnline/problem?id=2891
中等勺爱,解模方程組
http://acm.pku.edu.cn/JudgeOnline/problem?id=2154
中等,經(jīng)典問(wèn)題讯检,波利亞定理
http://cs.scu.edu.cn/soj/problem.action?id=2703
難琐鲁,極好的題目,Burnside引理+模線性方程組
http://acm.pku.edu.cn/JudgeOnline/problem?id=2764
較難人灼,需要數(shù)學(xué)方法围段,該方法在《具體數(shù)學(xué)》第七章有講
http://acm.pku.edu.cn/JudgeOnline/problem?id=1977
簡(jiǎn)單,矩陣快速乘法