動態規劃法(一)

2021-07-27 23:42:16 字數 860 閱讀 8919

一、引言

「動態規劃」 (dynamic programming)一詞源於研究優化問題的數學理論,動態規劃法的發明人貝爾曼(richard e.bellman)稱,選擇「dynamic」一詞純粹是看中了單詞本身的魅力,而不是其內在語義。「programming」在研究優化的領域中標識「搜尋最優程式」的意思。

1、重複子問題

大體上,動態規劃法與分治法具有類似的處理方式。使用動態規劃法的演算法通常先把問題分割成若干子問題,然後求出子問題的答案,最後利用這些答案得出整個問題的最終答案。在動態規劃法中,一些子問題的計算結果會用於多個問題的解題過程。因此,在對子問題進行一次計算的情況下,重複利用其結果。為了實現這種方法,需將子問題的答案預先儲存到記憶體,這種儲存答案的記憶體區域就是「快取」(cache),能夠重複利用兩次以上的子問題就稱為 「重複子問題」。

/*

應用 動態規劃法 的最有名的事例之一就是二項式係數的計算

根據二項式係數有如下遞迴式cn取r等於cn-1取r-1加上cn-1取r

*/#include using namespace std;

int bino(int n,int r)

int main()

int main()

cout << "請輸入二項式係數n,r" << endl;

cin >> n >> r;

bino2(n, r);//利用製表計算二項式係數

cout << bino2(n, r) << endl;

system("pause");

return 0;

}

動態規劃法

在學習動態規劃法之前,我們先來了解動態規劃的幾個概念 1 階段 把問題分成幾個相互聯絡的有順序的幾個環節,這些環節即稱為階段。2 狀態 某一階段的出發位置稱為狀態。3 決策 從某階段的乙個狀態演變到下乙個階段某狀態的選擇。4 狀態轉移方程 前一階段的終點就是後一階段的起點,前一階段的決策選擇匯出了後...

動態規劃法

有些問題在分解時會產生許多子問題,且分解出的自問題互相交織,因而在解這類問題時,將可能重複多次解乙個子問題。這種重複當然是不必要的,解決方法可以在解決每個子問題後把它的解 包括其子子問題的解 保留在乙個 中,若遇到求與之相同的子問題時,dp演算法又稱動態規劃,是資訊學競賽中選手必須熟練掌握的一種演算...

動態規劃法

最近遇到了一道挺有意思的演算法題 四種硬幣 1元3元4元5元 問 想要湊成n元錢最少幾枚硬幣?public class coinsgamemain fun 7,is public static void fun int k,int is i1 l min i2 if l k private stat...