最長遞增子序列(動態規划)


題目描述
有n個互不相同的整數an
若存在一個數列bm
其中對於任何1 < i < m
滿足bi < bi+1 且 abi < abi+1
則稱abn為an的一個遞增子序列
試求出給定序列的最長遞增子序列長度

程序輸入說明

本題由多組數據組成,以EOF結束

程序輸出說明

對於每組數據輸出一行結果,代表最長遞增序列長度

程序輸入樣例

3
1 2 3
10
3 18 7 14 10 12 23 41 16 24

程序輸出樣例

3
6
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int a[7010],b[7010];
 5 int main(){
 6     int n;
 7     while(cin>>n){
 8         for(int i=1;i<=n;i++)
 9             cin>>a[i];
10         int max=0;
11         b[1]=1;
12         for(int i=2;i<=n;i++){
13             int k=0;
14             for(int j=1;j<i;j++){
15                 if(a[j]<a[i]&&k<b[j])
16                     k=b[j];
17             }
18             b[i]=k+1;
19             if(max<b[i])
20                 max=b[i];
21         }
22         cout<<max<<endl;
23     }
24     return 0;
25 } 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM