淺入動(dòng)態(tài)規(guī)劃

眾所周知在算法中,存在著一群元老級(jí)別難度的算法,比如:動(dòng)態(tài)規(guī)劃,dfs,貪心,分治等,近段時(shí)間在我長(zhǎng)時(shí)間的研究下,重要對(duì)此有了一點(diǎn)點(diǎn)了解,現(xiàn)在和大家分享一下

首先,在我看來,動(dòng)態(tài)規(guī)劃就是將一個(gè)題,分解為無(wú)數(shù)個(gè)子問題,并且這些子問題的算法,解題過程都是一樣的子問題。然后通過每個(gè)子問題找到對(duì)應(yīng)的遞推公式,最后得出最終的正確答案。

第二,我們需要搞清楚邊界條件,比如說什么時(shí)候開始,什么時(shí)候停止,這是一個(gè)重要的環(huán)節(jié),當(dāng)邊界調(diào)節(jié)設(shè)置錯(cuò)誤時(shí),這道題將全軍覆沒。

接下來,就是要確定實(shí)現(xiàn)方法:在我看來我一般習(xí)慣使用雙層for循環(huán)。

來舉個(gè)簡(jiǎn)單的例子:藍(lán)橋杯算法訓(xùn)練的拿金幣問題,我們到最下面那個(gè)格子,我們要拿到最多的金幣,因?yàn)樽詈笠粋€(gè)格子的金幣是固定的,所以我們只需要知道走到上一個(gè)位置所能拿到的最多的金幣即可,接著推,我們只需要找到走到這一個(gè)格子上一步能取到的最大值即可

最后不論我們?cè)趺醋?,最后總?huì)退到原點(diǎn),現(xiàn)在就是思路的轉(zhuǎn)換,從倒推到正著打代碼。

接下來,我們創(chuàng)建一個(gè)數(shù)組,記錄走到每一個(gè)格子可能拿到的最大值即可。這道題的邊界條件很簡(jiǎn)單,就是數(shù)組的0號(hào)位存儲(chǔ)第一個(gè)格子的金幣即可。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容