最长单调递增子序列

 

下标

1

2

3

4

5

6

7

8

数组a

65

158

170

155

239

300

207

389

数组b

1

2

3

2

4

5

4

6

 完整程序:

#include<bits/stdc++.h>
using namespace std;
// 计算最长递增子序列的动态规划算法
#define NUM 100
int a[NUM];//序列L
int LIS_n2(int n)//教材上这一句丢掉了
{
int b[NUM]={0};//辅助数组b
int i,j;
b[1] = 1;
int max = 0;//数组b的最大值
for(i=2;i<=n; i++)
{
int k = 0;
for(j=1; j<i; j++)//0~i-1之间,b的最大值
if(a[j]<=a[i] && k<b[j]) k=b[j];
b[i] = k+1;
if(max<b[i]) max=b[i];
}
return max;
}
int main(){
    int n;
    cout<<"请输入数据个数"<<endl;
    cin>>n;
   cout<<"请输入"<<n<<"个数据个数"<<endl;
   for(int i=1;i<=n;i++){
    cin>>a[i];
   }
   cout<<"最长单调递增子序列的长度为"<<endl;
   cout<<LIS_n2(n);
return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章