動態規劃之最長單調遞增子序列(C++原始碼)
阿新 • • 發佈:2018-12-19
動態規劃之最長單調遞增子序列
問題:
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; }
主函式:
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cout<<LMax(n)<<endl;
}