AcWing 895. 最长上升子序列
原题链接
简单
作者:
rushhhhh
,
2021-02-19 13:17:00
,
所有人可见
,
阅读 230
#include <iostream>
using namespace std;
/*
状态表示f[i]
集合:以a[i]结尾的严格单调递增子序列
属性:子序列的长度,最大值
状态计算
0. a[0] and a[i] if(a[0] < a[i])
1. a[1] and a[i] if(a[1] < a[i])
...
i-1. a[i-1] and a[i] if(a[i-1] < a[i])
所以f[i] = max(f[k]) + 1;
*/
const int N = 1010;
int f[N], a[N];
int main()
{
int n;
cin >> n;
for(int i=0; i<n; i++)
{
f[i] = 1;
cin >> a[i];
}
for(int i=1; i<n; i++)
for(int j=i-1; j>=0; j--)
if(a[j] < a[i])
f[i] = max(f[i], f[j]+1);
int ans = 1;
for(int i=0; i<n; i++)
ans = max(ans, f[i]);
cout << ans;
return 0;
}