動態規劃 最長不降子串行 NlogN演算法

2021-07-03 09:28:17 字數 652 閱讀 2935

nlogn演算法精髓在於設立陣列dp[ ],dp[i]表示長度為i的不下降序列中結尾元素的最小值,用len表示陣列目前的長度,演算法完成後len的值即為最長不下降子串行的長度。

設當前的以求出的長度為len,則判斷num[i]和dp[len]:

1.如果num[i]>dp[len],即num[i]大於長度為len的序列中的最後乙個元素,這樣就可以使序列的長度增加1,即len++,然後現在的dp[len]=num[i];

2.如果num[i]num[i],然後因為dp[j]

例如:num[ ]= 

到num[2]=6,dp[3]=6應該沒什麼問題,

i=3,num[3]=4,3

i=5,num[4]>dp[3],  len++,len=4,dp[len]=num[4],得到序列長度len=4.

**:(嚴格遞增)

#include#includeint binsearch(int key,int* dp,int left,int right)

else right=mid-1;

} return 0;

}int main()

else

dp[j]=a[i];

} printf("%d\n",len);

}}

最長不降子串行 動態規劃

2008 4 8 最長不降子串行 小明晚上回家後,和爸爸玩這樣的乙個遊戲 給出n個 0一 動態規劃演算法 本題是比較簡單的動態規劃,請理解好遞推的過程。具體方法是對於陣列a,另設一陣列b,將b陣列內元素全置1,表示最短子串行長度為1。從陣列a左到右乙個個判斷,每判斷乙個,則從這個元素向右尋找,找到比...

動態規劃之最長不降序子串行

用乙個陣列dp記錄以該元素開始的所對應最長不下降子串行的長度。初始化dp 經過迴圈執行後形成下表 程式如下 最長不下降子串行 include using namespace std int dp 105 int lis int a,int n else continue 防止倒數第二個元素dp自加1...

求最長不降子串行(動態規劃)

求最長不下降子串行 動態規劃 狀態轉移方程 length i 1 length j j為data i data j 的情況下能使length j 取到最大的值 初始情況length 1 1 且length 0 0,這樣求出來的length j 才可以取到0 include int data 15 下...