算法基础之最长上升子序列
2023-12-25 18:19:29
最长上升子序列
-
核心思想:线性dp
-
明确f[N]集合定义 : 以第i个数结尾的最长子序列
-
计算 : a[j]为 a[i] 前面一个数值 若f [j] + 1 > f [i] 则f [i] = f [j] + 1 所以 f[i] = max(f[i] , f[j] + 1)
-
#include<iostream> #include<algorithm> #include<cstring> using namespace std; const int N = 1010; int f[N],a[N]; int n; int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; //a存数值 for(int i=1;i<=n;i++) { f[i] = 1; //用到i的时候初始化成1 (子序列只有自己) for(int j = 1;j<i;j++) //j<i 遍历i之前所有数 { if(a[j] < a[i]) f[i] = max(f[i] , f[j] + 1); } } int res = 0; //遍历所有f[i] 找到最大的 for(int i=1;i<=n;i++) res = max(res , f[i]); cout<<res; }
-
文章来源:https://blog.csdn.net/Pisasama/article/details/135202010
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!