1. 程式人生 > >演算法:單調遞增最長子序列

演算法:單調遞增最長子序列

設計一個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");
}