分解最優子結構
找出各級最優子結構間遞推關係
自底向上求解最優子結構表
追溯到最優解
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
動態規劃是對最優化問題的一種新的演算法設計方法。由於各種問題的性質不同,確定最優解的條件也互不相同,因而動態規劃的沒計法對不同的問題,有各具特色的表示方式。不存在一種萬能的動態規劃演算法。但是可以通過對若干有代表性的問題的動態規劃演算法進行討論,學會這一設計方法。多階段決策過程最優化問題 動態規劃的...