题目
解题思路
最长上升子序列
状态转移方程
dp[i] = max(dp[i], dp[j] + 1);
代码
#include<iostream>
#include<string>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#define BUFF ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
using namespace std;
const int MOD = 2333;
const int INF = 0x3f3f3f3f;
const int N = 5e3 + 3;
typedef long long ll;
int a[N], dp[N];
void work() {
int n; cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
dp[i] = 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);
int ans = -INF;
for (int i = 1; i <= n; i++)
ans = max(dp[i], ans);
cout << ans << '\n';
}
int main() {
BUFF;
int T = 1;
while (T--)
work();
return 0;
}