#include "iostream"
#include "fstream"
using namespace std;
/*
b[i]表示长度为i的子序列c[i]中,由若干元素组成的最长单调递增子序列的长度
b[1] = 1
b[i] = max{b[k]} + 1 c[k]<=c[i], 1<=k<=i
*/
int b[100];
int c[100];
int increase(int n)
{
b[1] = 1;
int max;
for(int i=2; i<=n; i++)
{
max = 0;
for(int k=1; k<=i; k++)
if(c[k] <= c[i] && max < b[k])
max = b[k];
b[i] = max + 1;
}
int temp = 0;
for(i=1; i<=n; i++)
if(b[i] > temp)
temp = b[i];
return temp;
}
int main()
{
int n;
cout << "输入序列长度:" ;
cin >> n;
cout << "输入子序列:";
for(int i=1; i<=n; i++)
cin >> c[i];
int count = increase(n);
cout << "最长单调递增子序列为:" << count << endl;
return 0;
}
最长单调递增子序列(O(n^2))
最新推荐文章于 2022-04-10 20:11:43 发布