求序列中最長遞增子串行的長度

2021-08-31 12:39:11 字數 745 閱讀 2660

#include

#define maxnum 100

/*函式功能:求解序列中的最大遞增子串行的中包含的元素個數

演算法說明:用到了動態規劃問題,分解子問題b陣列是用來儲存每乙個子串行中的最大遞增子串行

求具有n個元素的序列中的最大遞增自序列問題分解為

a[0], a[0] a[1], a[0] a[1] a[2], a[0] a[1] a[2]...a[m] m< n個子序列求其中的最大遞增子串行

a[0]顯然是遞增的 所以b[0] = 1

a[0] a[1]求其中的最大遞增自序列要依靠 a[0]如果 b[0] + 1 > max則讓max = b[0]

動態規劃使用條件:

1. a[0]是遞增的 最大遞增自序列元素個數為1 是確定的 最優的

2. a[0]....a[j] (j < n) 最大遞增子串行的元素個數依賴於 a[0]...a[j - 1]的最大子串行 只對當前狀態保持最優

依次遞推下去 a[0]....a[j]也是最優的

*/int main()

b[0] = 1;

for(i = 1; i < n; i++)

}b[i] = max + 1;

}max = b[0];

for(i = 1; i < n; i++)

printf("最大子串行個數為:%d\n", max);

return 0;

}

陣列中最長遞增子串行的長度

求陣列中最長遞增子串行的長度 什麼是最長遞增子串行呢?問題描述如下 設l 是n個不同的實數的序列,l的遞增子串行是這樣乙個子串行lin 其中k1 如 在序列1,1,2,3,4,5,6,7中,其最長的遞增子串行為1,2,4,6。其長度為4。對於這個問題有以下幾種解決思路 1 把a1,a2,an排序,假...

最長遞增子串行的長度

對於乙個數字序列,請設計乙個複雜度為o nlogn 的演算法,返回該序列的最長上公升子串行的長度,這裡的子串行定義為這樣乙個序列u1,u2.其中ui ui 1,且a ui a ui 1 給定乙個數字序列a及序列的長度n,請返回最長上公升子串行的長度。測試樣例 2,1,4,3,1,5,6 7返回 4採...

陣列中最長遞增子串行

陣列是亂序的,如1,1,2,3,4,5,6,7 根據無後效性定義,陣列中當前元素所形成的子串行與其前面元素形成的子串行沒有關係,所以 lis i 1 max 1,lis k 1 其中,array i 1 arry k 且任意k i lis i 儲存對於當前陣列arry i 形成的最長子序列的長度值,...