本文中只讲到了升序,降序只要将大于号换成小于号即可
本题用普通动态规划求解,递推式为:f[i]=max{f[j]+1,a[i]<a[j]},f[i]表示以a[i]结尾的最长递减子序列的长度。初始条件f[i]=1,1<=i<=n,通过枚举i,j,可求出问题的解,解为max{f[i],1<=i<=n}。复杂度O(n^2)。
#include <iostream>
#include <vector>using namespace std;
void MaxOrderedSeqence(const vector<int> &data)
{
int num=data.size();
vector<int> array(num,1);
//以n结束的最长子序列的长度存在array[n]中
//所以array中是长度
{
int max=0;
for(int j=0;j<i;j++)
{
//找到i前边的某个点,这个点比i的值小,还是比i小的所有点中array值最大的
{
max=array[j];