C++ 关于最长下降子序列问题

/* 最长下降子序列 O(n^2) 算法*/
#include <iostream>
using namespace std;

int main()
{
    int m,i,j;  // m 输入序列的长度 
    int hig[20],sco[20];    // hig[20] 存储输入的序列 
                            // sco[20] 记录各个字符所能
                            // 组成的最长下降子序列的长度. 
    cin>>m;
    for( i = 0; i < m; ++i )
        cin>>hig[i];

    sco[0] = 1; // 首个字符的最长下降子序列长度最小为1
    for( i = 1; i < m; ++i )
    {
        sco[i] = 1; // 初始化
        for( j = 0; j < i; ++j )
        {
            // 将 hig[i] < hig[j] 处的'<'改为'>' 即为求 
            // 最长上升子序列。
            // 算法 可草稿演算。
            if(hig[i]<hig[j] && sco[j]+1>sco[i]) 
                sco[i] = sco[j]+1;
        }
    }

    int max = 0;
    for( i = 0; i < m; ++i )    // 搜索出最长下降子序列的长度
        if(sco[i] > max)
            max = sco[i];

    cout<<max<<endl;    // 输出
    return 0;
}

// 思考:如何才能把最长上升(下降)子序列输出?

你可能感兴趣的:(蓝桥集训)