#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct poj2533 {
/*[问题描述]:求最长上升子序列的长度*/
/*[解题思路]:f[i]表示以i结尾的最长上升子序列的长度,则f[i]=max{f[j]|v[j]<v[i],j<i}+1*/
int n;
int v[1005];
int f[1005];
void work() {
while (cin >> n) {
for (int i = 1; i <= n; i++)
cin >> v[i];
f[0] = 0;
for (int i = 1; i <= n; i++) {
f[i] = 1;
for (int j = i - 1; j >= 1; j--)
if (v[j] < v[i])
f[i] = max(f[i], f[j] + 1);
}
int ans = 0;
for (int i = 1; i <= n; i++)
ans = max(ans, f[i]);
cout << ans << endl;
}
}
};
int main()
{
poj2533 solution;
solution.work();
return 0;
}
poj2533-Longest Ordered Subsequence(最长上升子序列)
最新推荐文章于 2020-07-23 20:33:50 发布