参考视频小电视:【动态规划3-1:最长不下降序列】https://www.bilibili.com/video/BV1fK411L751?vd_source=8e5e1c8c2ec3b6912ce3d9aa0c73f879
题目
题目分析
使用下标进行存储访问
int a[201];
int f[201];//从第i个数开始的长度
int p[201];//位置访问
for(int i = 0 ; i < n ; i ++){
cin>>a[i];
}
for(int i = n-1 ; i >= 0 ; i--){
for(int j = i+1 ; j <n ; j++){
maxn = 0 ;
k = 0;
if(a[i]<=a[j]){
if(f[j] > maxn){
maxn = f[j];
k=j;//记录下标
}
}
}
f[i] = maxn+1;//访问保存
p[i] = k;//下标保存
}
int ans,s = 0;
for(int i = 0 ; i < n ; i++){
if(f[i] > ans) {
ans = f[i];
s = i;//记录最大数值的下标
}
cout<<"max = "<<ans<<endl;
while(s != 0){
cout<<a[s]<<endl;
s = p[s];
}
}