动态规划之最长单调递增子序列(C++源码)
动态规划之最长单调递增子序列
问题:
L={a1,a2,a3,…,an}既L是由n个不同的实数组成的序列,求L的最长单调递增子序列(下标可不连续)。
分析:
设辅助数组b,b[i]表示以a[i]为结尾的最长递增子序列的长度,最长递增子序列的长度,就是数组b的最大值。
代码:
最优值:
#include<bits/stdc++.h>
using namespace std;
#define num 100
int a[num];
int LMax(int n){
int b[num]={0};
b[1]=1;//数组只有一个数时,最长为1
int max=0;
for(int i=2;i<=n;i++){
int k=0;
for(int j=1;j<i;j++){
if(a[j]<=a[i]&&k<b[j]){
k=b[j];
b[i]=k+1;
}
if(max<b[i]){
max=b[i];
}
}
}
return max;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
主函数:
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cout<<LMax(n)<<endl;
}
1
2
3
4
5
6
7
8
测试:
相关推荐
yedaoxiaodi 2020-07-26
us0 2020-06-25
Eduenth 2020-06-22
Oudasheng 2020-06-13
sunjunior 2020-05-19
chenfei0 2020-04-30
老和山下的小学童 2020-04-20
SystemArchitect 2020-04-14
jiayuqicz 2020-02-02
zangdaiyang 2020-01-25
yuanran0 2020-01-20
yedaoxiaodi 2020-01-12
rein0 2020-01-01
Oudasheng 2019-12-27
Oudasheng 2019-12-22
wuxiaosi0 2019-12-17
trillionpower 2019-11-23
ustbfym 2019-11-03