测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A18713. LIS最长严格上升子序列

填空题 困难

题目描述

LIS最长严格上升子序列

题目描述

给定n个整数,求严格上升的最长子序列长度(子序列可不连续)。

输入格式

第一行n;第二行n个整数

输出格式

输出LIS长度

样例输入

8
10 9 2 5 3 7 101 18

样例输出

4

参考答案

#include <iostream> #include <algorithm> using namespace std; const int MAXN = 1005; // 根据题目数据范围改大小即可 int a[MAXN]; int dp[MAXN]; int main() { int n; cin >> n; for (int i = 0; i < n; ++i) cin >> a[i]; // 初始化dp全部为1 for (int i = 0; i < n; ++i) dp[i] = 1; int ans = 1; for (int i = 0; i < n; ++i) { for (int j = 0; j < i; ++j) { if (a[j] < a[i]) dp[i] = max(dp[i], dp[j] + 1); } ans = max(ans, dp[i]); } cout << ans << endl; return 0; }
上一题 下一题