最长上升子序列

原题

给定一个长度为 N 的数列A,求数值严格单调递增的子序列的长度最长是多少。

输入格式

第一行包含整数 N

第二行包含 N 个整数,表示完整序列。

输出格式

输出一个整数,表示最大长度。

数据范围

1N1000
109Ai(A)109

输入样例:

7
3 1 2 1 8 5 6

输出样例:

4

解决方案1

定义f[i]:前i+1个元素中的最长子序列的长度
决策:

  1. a[i]
  2. a[i]

C++代码实现

#include <iostream>
using namespace std;
const int N = 105;
int a[N], f[N];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i ++) {
cin >> a[i];
}
for (int i = 0; i < n; i ++) {
f[i] = 1; // 初始值,长度最少为1
for (int j = 0; j < i; j ++) {
if (a[i] > a[j]) {
f[i] = max(f[i], f[j] + 1);
}
}
}
int res = 1;
for (int i = 0; i < n; i ++) {
res = max(res, f[i]);
}
cout << res << endl;
return 0;
}
posted @   spoonb  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示