演算法:單調遞增最長子序列
阿新 • • 發佈:2018-12-24
設計一個O(n2)時間的演算法,找出由n個數組成的序列的最長單調遞增子序列。
輸入格式:
輸入有兩行: 第一行:n,代表要輸入的數列的個數 第二行:n個數,數字之間用空格格開
輸出格式:
最長單調遞增子序列的長度
輸入樣例:
在這裡給出一組輸入。例如:
5
1 3 5 2 9
輸出樣例:
在這裡給出相應的輸出。例如:
4
#include<iostream> using namespace std; int DL(int a[], int b[],int n) { for (int i = 1; i < n; i++) { for (int j = 0; j < i; j++) { if (a[j] < a[i]&& b[j]>b[i] - 1) { b[i] = b[j] + 1; } } } int t = b[1]; for (int k = 0; k < n; k++) { if (b[k] > t) { t = b[k]; } } return t; } int main() { int n; cin >> n; int *a = new int[n]; int *b = new int[n]();//置為0; for (int i = 0; i < n; i++) { b[i]++; } for (int i = 0; i < n; i++) { cin >> a[i]; } cout << DL(a, b, n); system("pause"); }