動態規劃 最長遞增子串行

2021-10-19 17:56:49 字數 633 閱讀 3838

最長遞增子串行是動態規劃中最經典的問題之一,該問題描述的是在乙個已知序列中,取出若干元素(不必連續)組成乙個新的序列,子串行的各個數先後順序保持不變,且對子序列中的任意下標x令dp[i]表示以a[i]作為末尾的最長遞增子串行的長度。於是,通過設定這麼乙個陣列,最長遞增子串行的長度便是陣列dp中的最大值。

由於dp[i]是以a[i]作為末尾的最長遞增子串行的長度,因此只有兩種情況:

①a[i]之前的元素都比a[i]大,即最長遞增子串行只有a[i]本身,即dp[i]=1。

②a[i]之前的元素a[j]比a[i]小,此時只需將a[i]新增到a[j]作為末尾的最長遞增子串行,便可構成新的乙個遞增子串行。即dp[i]=dp[j]+1。只需將i之前的元素逐一遍歷,便可獲得以a[i]作為末尾的最長遞增子串行的長度dp[i]。

從這兩種情況可以得到狀態轉移方程dp[i]=max。

#include#includeusing namespace std;

const int maxn=25;

int height[maxn];//飛彈高度

int dp[maxn];

int longestincreasingseq(int n)

return 0;

}

動態規劃 最長遞增子串行

給出序列 1 2 3 4 2 5 3 4 a 1 1,a 2 2,a 7 3,a 8 4 求其最長的遞增子串行,以上最長遞增子串行為 1 2 3 4 5 問題細分 初始化條件f 1 1,序列只有1個長度即為1 f 2 a 2 與下標小於2的比較,即a 1 比較,a 2 a 1 因此更新f 2 f 1...

動態規劃 最長遞增子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度 例項 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行為 2,3,7,101 長度為4說明 可能會有多種最長上公升子串行的和,只需要輸出對應長度即可 演算法的時間複雜度應為o n2 首先,dp陣列的定義如下 dp...

動態規劃 最長遞增子串行

經典的最長子序列問題,最近程式設計訓練遇到此題苦無思路,在網上找到比較規範的解答,細思兩天後還是覺得有點問題,現在整理總結如下 參照 1.問題描述 給定乙個序列,求解它的最長 遞增 子串行 的長度。比如 arr 的最長遞增子串行長度為4。即為 1,4,5,9 2.dp演算法分析 按照上述作者的解答 ...