895. 最长上升子序列
最基础的最长上升子序列问题
这里用的是dp做法
定义f[i]为从1~i的所有上升子序列最大的长度
双重循环,以a[i]为最后一个数,枚举所有小于a[i]的数a[j]作为序列的倒数第二个数,根据f[i]的定义,对于所有情况,最长子序列的长度即为f[i]=f[j]+1(f[j]为所有合法情况下的最大值)
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1010;
int f[N], a[N];
int n,ans;
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)cin >> a[i];
for (int i = 1; i <= n; i++)
{
f[i]=1;
for (int j = 1; j < i; j++)
{
if(a[j] < a[i])
f[i]=max(f[i],f[j]+1);
}
}
for(int i=1;i<=n;i++)ans=max(ans,f[i]);
cout << ans << endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】