這個嘛,我以爲是m[i]=max(m[0~i-1])+1;完了複雜度是O(n^2/2);ios
書上開了一個輔助數組d[],就很nice,思想是若是m[i]>d[最後一個],辣麼直接添加進來,數組
若是m[i]<d[最後一個],就讓它替換掉d[]中第一個比它大的,畢竟比它大的在前面,發展顯然沒有它好spa
固然也能夠dpci
代碼嘛……it
#include <algorithm>
#include <iostream>
using namespace std;
const int MAX = 1000;
int a[MAX],dp[MAX];
int main(){io
int n,m=1;
cin >> n;
for(int i = 0; i < n; i++)
cin >> a[i];stream
for(int i = 0; i < n; i++) {
dp[i] = 1;
for(int j = 0; j < i; j++) {
if(a[j] < a[i] && dp[i] < dp[j] + 1)
dp[i] = dp[j] + 1;
}
}
for(int i=0;i<n;i++){
m=(dp[i]>m)?dp[i]:m;
}
cout << m << endl;
return 0;
}co