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

来源:互联网 发布:java树形结构简单实现 编辑:程序博客网 时间:2024/05/23 19:15
/*     最长下降子序列 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;}// 思考:如何才能把最长上升(下降)子序列输出?
0 0