暑假集訓總結

2021-08-07 09:59:05 字數 3119 閱讀 4503

暑假集訓這就結束了,這個暑假算是上學以來最充實的乙個暑假了,乙個暑假除了休息的兩個周之外,都在好好的學習,雖然每天從早坐到晚,一直在電腦面前冥思苦想,一遍遍的問自己「我到底錯在哪了」,但還是有好多的收穫,學習到了知識,提高了自己寫**的能力,鍛鍊了思考問題的能力,而且還提前體驗一把碼農的感覺,近乙個月的時間,沉浸在學習中無法自拔。不知不覺,到了總結的時候了,總結一下整個集訓的收穫。

這次集訓,先是複習了搜尋、圖論、二分的知識,之後又學習了單調佇列、單調棧、樹狀陣列。所有知識分成幾個專題,做題目熟悉這些知識。總結這次集訓學到的新知識,再給自己加深一次印象。首先是搜尋、最小生成樹、最短路徑、二分:搜尋可是老知識了,從上學期就在學習,這個暑假又能有機會在通過題目來熟悉搜尋的題型,做搜尋的時候,首先要審清題意,盡可能發現隱藏的條件,判斷好深搜與廣搜,深搜與廣搜在用圖上很大的區別,深搜一條路走到黑,一般用於尋找多個解,做深搜題目要判斷好剪枝,可一有效的優化**,同時判斷好剪枝的範圍和題目的要求,判斷返回條件。廣搜常用於尋找單一的最短路線,或者最小規模的路徑搜尋,廣搜是一層一層的往下搜,保證當前搜到的都是最優解,不需要回溯,找到最優值可以直接結束輸出。

圖論最後的知識是在上學期最後一節課的時候學習的,當時學的比較淺,這次集訓好好的學習了一下,並且通過題目熟悉了最短路徑的各種演算法。

最小生成樹:聯通圖g的乙個子圖如果是一棵包含g的所有頂點的樹,則該子圖稱為g的生成樹生成樹是聯通圖的極小連通子圖。所謂極小是指:若在樹中任意增加一條邊,則將出現乙個迴路;若去掉一條邊,將會使之程式設計非連通圖。生成樹各邊的權值總和稱為生成素的權。權最小的生成樹稱為最小生成樹,常用的演算法有prime演算法和kruskal演算法。prime演算法基本思想就是先清空生成樹,任意取乙個定點加入生成樹。然後在那些乙個端點在生成樹里,另乙個端點不在生成樹里的邊中,取一條權值最小的邊,將它和另乙個端點加進生成樹。一直重複二步驟,知道所有的頂點都放進了生成樹中為止,到此生成樹就是最小生成樹。最短路徑問題是在尋找圖中兩節點之間的最短路徑。常用的演算法有floy演算法、dijkstra演算法、bellman-ford演算法、spfa演算法。不同演算法之間有各自的優缺點:

floy演算法是最簡單的最短路徑演算法,可以計算任意兩點之間的最短路徑,演算法複雜度是o(n^3),而且適應於出現負邊權的請況。演算法的基本思想:通過三重迴圈,第一層迴圈中間點k,第

二、第三層迴圈起點和終點i、j,如果點i到k的距離加上點k到點j的距離小於原先點i到點j的距離,那麼就用新的路經長度來更新原先點i到點j的距離,當迴圈完畢之後任意兩點之間的距離都被更新為兩點之間的最短路徑。用floy演算法要注意的是初始化時把不相連的點距離設為很大的數,其次floy演算法雖然很容易理解,但演算法複雜度較高。

dijkstra演算法用來計算乙個點到其他所有點的最短路徑的演算法,是一種單源最短路徑演算法,只能計算起點只有乙個的情況,演算法複雜度是o(n^2),它不能處理存在負邊權的情況。演算法的主要思想:開始將起點到起點的距離標記為0,然後進行n次迴圈,每次找出乙個到起點距離最短的點,將此點標記,然後列舉其他點到此點的距離,其他點到此點距離加上此點儲存的距離值如果更小,更新此點距離值,至迴圈結束,求得起點到每個點的最短路徑。學習dijkstra演算法結合圖來學習,會更加的簡單易懂。

bollman-ford演算法是用來計算從乙個點到其他所有點的最短路徑的演算法,也是一種單源最短路徑演算法,能夠處理存在負邊權的情況,但無法處理存在負權迴路的情況,演算法複雜度o(ne),n是頂點數,e是邊數。bollman-ford演算法基本思想和dijkstra演算法差不多,但是要列舉所有邊,不能枚點,而且bollman-ford,存在負權迴路無法求出最短路徑,但能夠判斷是否存在負權迴路,在演算法的兩重迴圈完成後,還存在某條邊使得:dis[u]+w二分的知識和搜尋一樣上學期就已經學過,這次也是再熟悉個中題型,發現做二分題目時遇到的問題,做二分的時候主要就是要就是找到怎麼應用二分,分的關鍵,確定判斷的條件,以及兩個端點的更新。做二分的時候有些問題要注意,精度的問題,精度的大小也會影響到答案的判斷,做二分專題的時候很多題目總是tle,要注意輸出的形式,用c輸出還是c++各有特點,特別是對於儲存小數的題目,有些題目用c輸出會超時用c++再加上ios::sync_with_stdio(false);便能通過。二分判斷的時候對等於情況下端點的修改需要注意。

單調佇列,理解很簡單,就是指佇列中的元素單調,隊首和隊尾的元素可以進行出隊操作,只有隊尾可以進行入隊操作。單調佇列常用的操作:插入,若新元素從隊尾插入後會破壞單調性,則刪除隊尾元素,直到插入後不再破壞單調性為止,再將其插入單調佇列。獲取最優值:訪問隊尾元素,獲得最大或者最小值。單調棧與單調佇列相似,棧是後進先出,單調性指的是嚴格的遞增或者遞減,單調棧的性質:若單調遞增棧,則從棧頂到棧底的元素是嚴格遞增的,若是單調遞減棧,則從棧頂到棧底的元素是嚴格遞減的;越靠近棧頂的元素越往後進棧。

單調棧與單調佇列不同的地方在於棧只能在棧頂操作,一次一般在應用單調棧的地方不限定它的大小,否則會造成元素無法進棧。做單調棧與單調佇列的問題,找好邏輯關係,特別是一些要求記錄陣列位置的題目,在位置處理上要仔細的推算,需要多想,多在紙上走幾遍思路,搞清楚邏輯關係。

最後就是學習了乙個周又做了一周題的樹狀陣列,樹狀陣列不太好理解,看了整整一周的部落格,研究各種題型,搞明白**的原理。樹狀陣列是乙個查詢和修改複雜度為log(n)的資料結構,主要用於查詢任意兩位之間的所有元素之和,但是每次只能修改乙個元素的值;經過簡單的修改可以在log(n)的複雜度下進行範圍修改,但是這是只能查詢其中乙個元素的值。樹狀陣列基本可以分為幾種題型:樹狀陣列基本應用、標記陣列,單調更新、區間更新,單點查詢、單點更新,刪除元素、區間更新,區間求和、二維樹狀陣列區間更新,求和等等。二維陣列可以說是一種優化手段,做二維陣列問題需要先從其他方面考慮問題如何處理,形成思路後用樹狀陣列處理優化。一般樹狀陣列應用到歸併排序求逆序、離散化處理、離線處理、dp、二分等技巧來處理題目。樹狀陣列的題目做的基本題型比較多,專題裡剩下的題目都是要考慮其他方面的問題再應用樹狀陣列來優化的題目了,對於這方面還需要加強,應用樹狀陣列來優化還沒太頭思路。

近乙個月的集訓,除了平時的聯絡還有好多訓練賽,一次次練習賽也能看出自己有些進步,在處理問題的方面有進步,常見的一些問題能很快想到並解決。在集訓期間還參加了一次ccpc網路賽打了個醬油,那一道題目因為乙個小細節讓難為了我們一下午,可見寫**的時候細節處理要注意。通過這次集訓,體會到了碼農的感覺,同時也學習了不少新的知識,關鍵是鍛鍊了寫**的能力,而且做題目時候遇到各種問題,鍛鍊了對問題的處理能力,也積累了很多處理問題的經驗,見識了各種題型,熟悉了比賽的感覺,感覺自己收穫很多。

暑假集訓就要過去了,以後的不能像暑假這樣一天撲在**上,但依然不會懈怠,會好好聽老師安排,學好各種知識。

暑假集訓總結

華信暑假集訓總結 暑假乙個月的總結 第一 就是不夠細心,關於這一點,在前兩次的總結都有提到,但是自己這次還是沒有改正過來,說明自己確實是粗心,不過在以後的學習過程中還是要克服這個問題!第二 自己寫的 結構很亂,模擬較多時,經常都會找不到自己在 定義的,這個又是在 寫的。所以在接下來的過程中,自己還是...

暑假集訓總結

三十五天的集訓生活,伴隨著我們最後一次的個人賽的結束而結束了。這乙個多月的三點一線的生活,讓我再次感受到,為自己目標奮鬥的滿足感!1,集訓,讓我收穫的不僅僅是學習新的知識,還教會了我做人做事的大道理。從剛開始的分組賽到個人賽再到組隊賽,整個暑假集訓經歷了二十幾場比賽,很感激自己能一直遵守比賽規則到最...

暑假集訓總結

一句話概括 這個暑假學的演算法比我三年學的都要多。覺得自己漏的東西太多了,主要學習了樹與圖,通過 演算法高階 猛補了數學知識。學了很多演算法,每種演算法下都有例題,就不一一枚舉。倍增求lca,st演算法,樹狀陣列,帶權樹狀陣列 巧妙運用了當前未入隊就不會計算進來的條件 線段樹,主席樹模板,treap...