Qsort LCS最長遞增序列

2021-06-22 22:22:21 字數 851 閱讀 9868

設序列x=是對序列l=按遞增排好序的序列。

那麼顯然x與l的最長公共子串行即為l的最長遞增子串行。

這樣就把求最長遞增子串行的問題轉化為求最長公共子串行問題lcs了。

最長遞增子串行 lis

設陣列長度不超過 30

quicksort + lcs

#include using namespace std;

void swap(int * arr, int i, int j)

void qsort(int * arr, int left, int right)

} swap(arr,index,left);

qsort(arr,left,index-1);

qsort(arr,index+1,right);

}int dp[31][31];

int lcs(int * arr, int * arrcopy, int len)

else if(dp[i-1][j] > dp[i][j-1])

else

}} return dp[len][len];

}void main()

; int arrcopy [sizeof(arr)/sizeof(int)];

memcpy(arrcopy,arr,sizeof(arr));

qsort(arrcopy,0,sizeof(arr)/sizeof(int)-1);

/* 計算lcs,即lis長度 */

int len = sizeof(arr)/sizeof(int);

printf("%d\n",lcs(arr,arrcopy,len));

}

最長遞增序列

面試題 17.08.馬戲團人塔 原題鏈結 有個馬戲團正在設計疊羅漢的表演節目,乙個人要站在另一人的肩膀上。出於實際和美觀的考慮,在上面的人要比下面的人矮一點且輕一點。已知馬戲團每個人的身高和體重,請編寫 計算疊羅漢最多能疊幾個人。示例 height.length weight.length 1000...

最長公共子串行 最長遞增子串行 最長遞增公共子串行

求最長公共子串行 int dp maxn maxn int a maxn b maxn int main else dp i j max dp i 1 j dp i j 1 printf d n dp m n return 0 輸出最長公共子串行 int dp maxn maxn int d max...

最長遞增子串行

這是微軟實習生筆試遇到的,題意 求乙個陣列中最長遞增子串行的長度。要求選擇該題最好演算法的時間複雜度和空間複雜度。答案 時間複雜度o nlgn 空間複雜度o n 這題明顯用動態規劃來解。假設在目標陣列array 的前i個元素中,以array i 元素為最大元素的遞增子串行的長度是lis i 那麼 遞...