1. 程式人生 > >高手給的訓練計劃

高手給的訓練計劃

加減乘除 線段樹 生成樹 nbsp 獨立 經典 面積 常用算法 lcs

高手給的訓練計劃

一般要做到50行以內的程序不用調試、100行以內的二分鐘內調試成功、acm主要是考算法的 ,主要時間是花在思考算法上,不是花在寫程序與debug上。

下面給個計劃你練練:

第一階段:練經典常用算法,下面的每個算法給我打上十到二十遍,同時自己精簡代碼, 因為太常用,所以要練到寫時不用想,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、 把oibh上的論文看看(大概幾百篇的,我只看了一點點,呵呵)。

2、 平時掃掃zoj上的難題啦,別老做那些不用想的題、(中大acm的版主經常說我挑簡單的來 做:-P )

3、 多參加網上的比賽,感受一下比賽的氣氛,評估自己的實力、

4、 一道題不要過了就算,問一下人,有更好的算法也打一下。

5、 做過的題要記好

高手給的訓練計劃