下标 |
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;
}