首页 > 代码库 > 查找最长递增子序列
查找最长递增子序列
一般情况:
#include <stdio.h> #include <algorithm> #include <string.h> using namespace std; int a[1005],dp[1005],n; int LIS() { int i,j,ans,m; dp[1] = 1; ans = 1; for(i = 2;i<=n;i++) { m = 0; for(j = 1;j<i;j++) { if(dp[j]>m && a[j]<a[i]) m = dp[j]; } dp[i] = m+1; if(dp[i]>ans) ans = dp[i]; } return ans; }
#include <stdio.h> #include <algorithm> #include <string.h> using namespace std;
int d[1005],p[1005],n;
int LIS() { int i,j,sta,end,mid,l; for(i=2;i<=n;i++) { sta=1; end=l+1; while(sta<end) { mid=(sta+end)/2; if(d[i]<=p[mid]) end=mid; else sta=mid+1; } p[end]=d[i]; if(end==l+1) l++; } return l; }
查找最长递增子序列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。