dp(動態規劃)思想:
簡單來說就是把完整的乙個問題,按照題目要求分解成多個子問題的問題序列,在每乙個子問題中尋找到符合題目要求的最有解,再從子問題序列中尋找符合題目要求的一段序列,以此為答案。
那麼什麼情況下使用dp呢?
使用dp(動態規劃)的三個要求:
1、最優子結構:可以乙個整問題分解成乙個個子問題的最有解求解過程的。
3、無後效應:呼叫子問題最優解時,子問題的最優解不發生改變。
其實上面的三個要求,除了第乙個其他我都暫時還不能理解,三個要求來自第二位博主的總結,但總體來說要以第乙個為主。
那麼如何更快的掌握dp(動態規劃)?
我所看的兩位博主對於dp的描述都非常的詳細,但他們都提到,過多的解釋沒有作用,沒有直接來例題理解的透徹,因為是筆記我就只記兩個例題,總結就是要多刷題才能掌握dp,下面我上兩題從兩位博主那挑的題:
例題1:
經典的數字金字塔;(這題非常經典,方便快速入門dp)
輸入格式
第一行包含整數n,表示數字三角形的層數。
接下來n行,每行包含若干整數,其中第 i 行表示數字三角形第 i 層包含的整數。
輸出格式
輸出乙個整數,表示最大的路徑數字和。
資料範圍
1≤n≤500,
−10000≤三角形中的整數≤10000
輸入樣例:57
3 88 1 0
2 7 4 4
4 5 2 6 5
輸出樣例:
30acwing898. 數字三角形
例題2:
最長公共子串行;
給定兩個長度分別為n和m的字串a和b,求既是a的子串行又是b的子串行的字串長度最長是多少。
輸入格式
第一行包含兩個整數n和m。
第二行包含乙個長度為n的字串,表示字串a。
第三行包含乙個長度為m的字串,表示字串b。
字串均由小寫字母構成。
輸出格式
輸出乙個整數,表示最大長度。
資料範圍
1≤n,m≤10001≤n,m≤1000
輸入樣例:
4 5
acbd
abedc
輸出樣例:3
dp型別的題目還有很多,類似於石頭,揹包…等等一系列問題,學的還少,就不給自己的複習添亂了。
因為是第一次記筆記,引用的地方很多,自己總結的東西很少,不過在看兩位博主老師的文章時,因為知識的不足,很多地方看不懂,但也給了我學習的方向。
總結:下次需要學習的知識點有
1、分治演算法(第一位博主老師的文章中有分治和dp的區別,因為沒有學分治,暫時不理解,等到學習分治的時候我再去看一遍,加深理解)
2、貪心演算法(雖然粗略的學習了貪心演算法,但掌握不夠,在第一位博主老師的文章中略微看懂一些,但還不夠,需要更深度的學習後進行對比掌握)
3、lcs問題(這好像是一類問題,不是演算法,需要多刷才能看懂)
4、遞迴(這個很多地方都要用到,需要多學多刷多練)
以上是對我這次學習的總結,以及對下次學習的方向 ,寫這篇文章,方便我複習的時候快速建立方向和知識的回顧。最後感謝兩位博主的文章。
Boolan STL 第一周筆記
容器是用來儲存資料的,資料可以試使用者自定義的類,也可以試預定義的型別。c 中的容器主要使用有array vector list set map等。stl中的容器裡都有分配器,在宣告乙個容器的模板第二個引數就是分配器。分配器是用來給容器分配記憶體的,在一般情況下,使用預設的分配器即可。在stl中要實...
Boolan C 課程第一周筆記
第一周 20170407 類 帶指標 1 不帶指標 object based 基於物件 單一物件 object oriented 物件導向 多個有關聯的物件 語言學習 語言 標準庫 標頭檔案寫法 防衛式宣告 ifndef complex define complex 前置宣告 類的宣告 類的定義 e...
Boolan c 學習第一周筆記
1.一種基於物件 object based 這種是單一的類的設計 一種物件導向 object oriented 多重class的設計 對於類中的變數和函式而言,資料有很多份但是函式只有乙份。2.標頭檔案的正規寫法 ifndef 頭檔名 define 頭檔名 endif 採用了防衛式宣告。3.c 中的...