poj-2533(lis)

  • 题目链接: http://poj.org/problem?id=1458

  • 题目大意: 最长递增子序列(Longest Increasing Subsquence)

  • 思路: DP[i]表示以A[i]结尾的LIS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using namespace std;
const int kMaxN = 1001;
int kArr[kMaxN];
int kDp[kMaxN];
int kN;
* dp[i] 表示 a[i] 结尾的 最大 LIS
* dp[i] = max(dp[i], dp[j] + 1);
*/
int (){
memset(kDp, 0, sizeof(kDp));
for(int i = 0; i < kN; ++i){
kDp[i] = 1;
}
for(int i = 1; i < kN; ++i){ /// 以a[i]结尾的
for(int j = 0; j < i; ++j){
if(kArr[i] > kArr[j]){
kDp[i] = max(kDp[i], kDp[j] + 1);
}
}
}
int ret = 0;
for(int i = 0; i < kN; ++i){
ret = max(kDp[i], ret);
}
return ret;
}
int main(){
while(cin >> kN){
for(int i = 0; i < kN; ++i)
cin>>kArr[i];
int ret = Solve();
cout<<ret<<endl;
}
return 0;
}