動態規劃學習之最長上公升子串行

2021-07-09 03:16:18 字數 408 閱讀 6337

這個問題的關鍵是建立狀態方程dp[i],儲存演算法a[i]為終點的最長上公升子串行的長度,那麼dp[i]的解題思路就是從前面找到比a[i]小,並且具有最大dp[j](0<=j<=i-1)的j,並且在後面接上的a[i].因此方程為 dp[i] = dp[j]+1(0<=j<=i-1&&max(dp[j]))。除此之外,因為都是從比i小的dp[j]開始運算,因此當第乙個數的時候前面沒有值,所以需要手動判斷初始化dp[0]=1,從第二個開始計算。

#include#includeusing namespace std;

int main()

int count = 0;

for(int i = 0;icount)

count = dp[i];

//cout<}

cout<}

動態規劃 之 最長上公升子串行

乙個數的序列bi,當b1 b2 bs的時候,我們稱這個序列是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串行 ai1,ai2,aik 這裡1 i1 i2 ik n。比如,對於序列 1,7,3,5,9,4,8 有它的一些上公升子串行,如 1,7 3,4,8 等等。這些子串...

動態規劃之最長上公升子串行

北大郭煒老師講的能採用動態規劃求解問題的特點 1 問題具有最優子結構的性質 2 無後效性。實現動態規劃的三個步驟 1 講原問題分解為子問題 2 確定狀態以及初始狀態 邊界值 3 狀態轉移方程 人人為我 遞推型 第一步的子問題就是a i 為終點的最長上公升子串行。include includeusin...

動態規劃之最長上公升子串行

動態規劃指的是將乙個繁雜的問題分解成子問題之後,通過求解子問題的最優解,從而求得整體最優解。輸入資料 輸入的第一行是序列的長度n 1 n 1000 第一行給出序列的n個整數,這些整數的取值範圍在0 10000.輸出要求 最長上公升子串行的長度。輸入樣例 7 1 7 3 5 9 4 8 輸出樣例 範例...