動態規劃學習與例項 1

2021-06-28 19:38:19 字數 1436 閱讀 8385

分解最優子結構

找出各級最優子結構間遞推關係

自底向上求解最優子結構表

追溯到最優解

problem1. 給定乙個數字序列,找出其中最長子序列,子串行滿足順序遞增。求解最長子序列的長度和對應的子串行。

problem2. 給定乙個數字序列,找出其中和最大的子串行,並求解子串行的長度和對應的子串行。

problem1

最長遞增子串行的最優子結構:假設長度從

1 到

i的序列中,以a[

i]結尾的最優子串行對應的長度為op

t[i]

. i=

1:n 時依次得到最優子結構表.

遞推關係 op

t[i]

=i=1

i>1

and 4. 見c++**

#include 

#include

#include

using

namespace

std;

class maxstr

;maxstr::maxstr()

}maxstr::maxstr(vector

seq1)

maxstr::~maxstr()

//calc函式求給定序列的最大遞增子串行,子串行儲存在maxseq,長度為n

void maxstr::calc(vector

& maxseq, int & n)

else}}

maxseq.resize(n);

for (int j=n-1; j>=0; --j)

}//clac2求給定序列的最大和子串行,子串行儲存在maxseq,和為sum

void maxstr::calc2(vector

& maxseq, double & sum)

else

if(sumdouble temp = sum;

for (int j=end; j>=0 && temp !=0; --j)

reverse(maxseq.begin(), maxseq.end());

}//主函式測試類和動態規劃演算法

int main()

; vector

seq(arr, arr+9);

maxstr ms(seq);

vector

maxseq1;

vector

maxseq2;

int n;

double sum;

ms.calc(maxseq1, n);

ms.calc2(maxseq2, sum);

cout

<<"n = "

<" ";

}cout

<<"sum = "

<" ";

}cout

0;}

動態規劃學習筆記(1)

記錄一下慕課學習的筆記,以及例題 遞迴函式有n個引數就定義乙個n維的陣列,陣列的下標是遞迴函式引數的取值範圍。這樣就可以從邊界值開始逐步填充陣列,相當於計算遞迴函式值的逆過程。eg 例題1數字三角形 1.將原問題分解為子問題 將原問題分解為若干個子問題,與原問題的形式相同或類似,只不過規模小了。子問...

動態規劃1

維基百科 動態規劃是一種在數學和 電腦科學 中使用的,用於求解包含 重疊子問題 的最優化 問題的方法。其基本思想是,將原問題分解為相似的子問題,在求解的過程中通過子問題的解求出原問題的解。動態規劃的思想是多種演算法的基礎,被廣泛應用於電腦科學和工程領域。比較著名的應用例項有 求解 最短路徑 問題,揹...

動態規劃 1

動態規劃是對最優化問題的一種新的演算法設計方法。由於各種問題的性質不同,確定最優解的條件也互不相同,因而動態規劃的沒計法對不同的問題,有各具特色的表示方式。不存在一種萬能的動態規劃演算法。但是可以通過對若干有代表性的問題的動態規劃演算法進行討論,學會這一設計方法。多階段決策過程最優化問題 動態規劃的...