Description
这是一个简单的动规板子题。
给出一个由 �(�≤5000)n(n≤5000) 个不超过 106106 的正整数组成的序列。请输出这个序列的最长上升子序列的长度。
最长上升子序列是指,从原序列中按顺序取出一些数字排在一起,这些数字是逐渐增大的。
Input
第一行,一个整数 �n,表示序列长度。
第二行有 �n 个整数,表示这个序列。
Output
一个整数表示答案。
Sample 1
Inputcopy | Outputcopy |
---|---|
6 1 2 4 1 3 4 | 4 |
Hint
分别取出 11、22、33、44 即可
#include<bits/stdc++.h>
#define endl '\n'
#define ll long long
#define int ll
using namespace std;
int n;
int a[5009];
int dp[5009];
signed main()
{
ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
dp[i]=1;
}
int ans=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
if(a[i]>a[j]) dp[i]=max(dp[i],dp[j]+1);
}
ans=max(dp[i],ans);
}
cout<<ans<<'\n';
}