题意
求最长递增子序列长度
样例
Sample Input
7
1 7 3 5 9 4 8
Sample Output
4
AC代码
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
using namespace std;
//数组的声明给如果不是全局的或者static的, 会造成内存泄漏
//报错信息 : Process returned -1073741571 (0xC00000FD)
int a[1002];
int L[1002]; //存储最长非递增子序列的长度
int x[1002][1002]; //存储对应的最长非递增子序列
int n;
void IncreaseOrder(int a[], int n)
{
int i, j, k, index;
for (i = 0; i < n; i++) //初始化,最长递增子序列长度为1
{
L[i] = 1;
x[i][0] = a[i];
}
for (i = 1; i < n; i++)
{
int max = 1;
for (j = i - 1; j >= 0; j--) //寻找某个数之前,看能否找到递增序列
{
//如果改成a[j]>a[i],则就是计算最长非递增子序列
if ((a[j]<a[i]) && (max<L[j] + 1))//满足递增条件且长度小于之前的序列长度
{
max = L[j] + 1;
L[i] = max; //储存最大长度
for (k = 0; k<max - 1; k++)//储存最长递增子序列
{
x[i][k] = x[j][k];
}
x[i][max - 1] = a[i];
}
}
}
for (index = 0, i = 1; i<n; i++) //求递增子序列的最大长度
{
if (L[index] < L[i])
index = i;
}
cout << L[index] << endl; //输出最大长度
}
int main()
{
cin>>n;
for (int i = 0; i < n; i++)
cin >> a[i];
IncreaseOrder(a, n);
}
题源:poj.org/problem?id=…