设计一个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"); }