最长xx子序列
来源:互联网 发布:阿里云服务器开80端口 编辑:程序博客网 时间:2024/06/16 21:41
最长上升子序列
最长公共子序列
最长上升子序列
朴素算法 O(n*n)
dp[i]表示以a[i]为末尾的最长上升子序列的长度
#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int maxn = 100010;const int inf = 0x3f3f3f3f;int a[maxn],dp[maxn];int main(){ int n; while(~scanf("%d",&n)) { for(int i = 0;i<n;i++) { scanf("%d",&a[i]); dp[i] = 1; } int ans = 0; for(int i = 1;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]); } printf("%d\n",ans); }}
O(nlogn)
dp[i] = 长度为i+1的上升子序列中末尾元素的最小值,直接运用STL 中的lower_bound()很方便
#include <iostream>#include <algorithm>#include <cstdio>using namespace std;const int maxn = 100010;const int inf = 0x3f3f3f3f;int a[maxn],dp[maxn];int main(){ int n; while(~scanf("%d",&n)) { for(int i = 0;i<n;i++) { scanf("%d",&a[i]); dp[i] = inf; } for(int i = 0;i<n;i++) { a[i] = *lower_bound(dp,dp+n,a[i]) = a[i]; } printf("%d\n",lower_bound(dp,dp+n,inf) - dp); }}
最长公共子序列
#include <iostream>#include <algorithm>#include <cstring>using namespace std;string s1,s2;int dp[1010][1010];int main(){ while(cin >> s1 >> s2) { int len1 = s1.length(); int len2 = s2.length(); memset(dp,0,sizeof dp); for(int i = 1;i<=len1;i++) { for(int j = 1;j<=len2;j++) { if(s1[i-1] == s2[j-1]) { dp[i][j] = dp[i-1][j-1] + 1; } else dp[i][j] = max(dp[i-1][j],dp[i][j-1]); } } cout<<dp[len1][len2]<<endl; }}
阅读全文
0 0
- 最长xx子序列
- 最长不XX子序列
- 最长不XX子序列
- 最长XX子序列N*LOGN算法
- 07年 ZZUPC校赛第五题 合唱队形(最长XX子序列。。)
- 【例题】【动规(最长XX子序列)】NKOJ 1004 拦截导弹
- 【例题】【动规(最长XX子序列)】NKOJ 1042 合唱队形(NOIP)
- 最长公共子序列
- 最长公共子序列
- 最长递增子序列
- 最长递增子序列
- 最长公共子序列
- 最长公共子序列
- 最长递增子序列
- 最长公共子序列...
- 最长上升子序列
- 最长公共子序列
- 最长公共子序列
- JS笔记
- Pstore dmesg write 篇
- linux系统之高级网络控制
- 控制kernel打印输出到控制台
- tensorflow文件数据读取机制剖析
- 最长xx子序列
- 排序算法
- yum安装postgresql
- ORB_SLAM2系列之一:Ubuntu 14.04 ROS indigo下编译安装ORB_SLAM2
- 事务属性ACID
- Git 工具
- JDK中String类为什么设计成final类型的
- 三点估算法 PERT计划评审技术
- 设计模式之状态模式(State)