问题描述: n个元素的序列中最长递增子序列的长度。该题只要求求解并不要求解的组成,总体来讲比较简单。
seq[n] : n 个元素的序列
f[i] 以 seq[i] 结尾的递增序列长度, f[0] = 1 一个元素的递增子序列
f[i] = f[j] j = [0, i-1] && seq[j] < seq[i] 子问题的个数由i决定,子问题的选择选择计算结构最大的子问题
#include<iostream>
#include<fstream>
using namespace std;
//#define DEBUG
static const int MAX = 1001;
static int seq[MAX];
static int f[MAX];
int main()
{
#ifdef DEBUG
fstream cin("G:\\book\\algorithms\\acm\\Debug\\dat.txt");
#endif
int n;
int i, j;
int result;
while (cin >> n)
{
for (i = 1; i <= n; i++)
{
cin >> seq[i];
}
f[1] = 1, result = 1;
for (i = 2; i <= n; i++)
{
f[i] = 1;
for (j = 1; j < i; j++)
{
if (seq[j] < seq[i] && (f[j] + 1 > f[i]))
f[i] = f[j] + 1;
}
if (f[i] > result)
result = f[i];
}
cout << result << "\n";
}
return 0;
}