/*
* problem: 最长递增子序列
* method: 动态规划
* date: 2020/04/28
*/
#include<iostream>
using namespace std;
const int N = 20;
int A[N];//序列A
int L[N];//最长递增子序列长度
int x[N][N];//对应的最长子序列
void IncreaseOrder(int n) {
int i,j,k;
for(i=0; i<n; i++) {
L[i]=1;
x[i][0]=A[i];
}
for(i=1; i<n; i++) {
int max=1;
for(j=i-1; j>=0; j--) {
if((A[j]<A[i]) && (max<L[j]+1)) {
max=L[j]+1;
L[i]=max;
for(k=0; k<max-1; k++)
x[i][k]=x[j][k];
x[i][max-1]=A[i];
}
}
}
}
int main() {
int i,j,n;
cout<<"请输入序列长度:";
cin>>n;
cout<<"请输入序列:"<<endl;
for(i=0; i<n; i++)
cin>>A[i];
IncreaseOrder(n);
cout<<"最大递增子序列为:";
for(i=0; i<L[n-1]; i++)
cout<<x[n-1][i]<<' ';
cout<<"\n最大长度为:"<<L[n-1]<<endl;
return 0;
}
动态规划——最长递增子序列
最新推荐文章于 2024-07-20 22:18:37 发布