课本例题,具体分析课本里有,就不在分析了。
【代码】
#include <stdlib.h>
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
const int M=205;
int a[M][4],n,maxn=0,t;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i][1]);//原数
a[i][2]=1;//存储最大长度
a[i][3]=0;//记录路径 上一个位置
}
for(int i=n-1;i>=1;i--){
int l=0,p=0;
for(int j=i+1;j<=n;j++)
if(a[i][1]<=a[j][1]&&a[j][2]>l){
l=a[j][2];p=j;
}
if(l>0){
a[i][2]+=l;a[i][3]=p;
}
}
for(int i=1;i<=n;i++){
if(a[i][2]>maxn){
maxn=a[i][2];
t=i;
}
}
printf("max=%d\n",maxn);
while(t!=0){
printf("%d ",a[t][1]);
t=a[t][3];
}
return 0;
}