/*************************
LCS/LIS/LCIs模板总结:
*************************/ /*****************************************************
LCS:最长公共子序列 求长度为 len1 的序列 A 和长度为 len2 的序列 B 的LCS
注意:序列下标从 0 开始
滚动数组写法。 返回 LCS 长度
*****************************************************/ int LCS(int len1,int len2)
{
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%2][j] = dp[(i-1)%2][j-1]+1;
else
{
int m1 = dp[(i-1)%2][j];
int m2 = dp[i%2][j-1];
dp[i%2][j] = max(m1, m2);
}
}
} return dp[len1%2][len2];
} /*******************************************
LIS:最长上升子序列 POJ 1257 最少拦截系统
********************************************/
#include<stdio.h>
#include<algorithm>
using namespace std; const int maxn = 1000+10;
const int INF = 30000+10;
int a[maxn]; //导弹高度
int h[maxn]; // h[i] 表示当前第 i 个系统拦截的高度 int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
for(int i = 0; i < n; i++)
{
scanf("%d", &a[i]);
// h[i] = INF;
} h[0] = -1; //保证边界递增
h[1] = a[0]; //第一个
int len = 1; //当前已经确立长度 for(int i = 1; i < n; i++)
{
int index = lower_bound(h,h+len+1,a[i])-h; //保证 h[index] 是数组 h 中第一个 >= a[i] 的
h[index] = a[i];
if(index > len)
len = index;
}
printf("%d\n", len);
}
return 0;
} /***************************************************
LCIS:最长公共上升子序列 求序列 A 长度为 N 和序列 B 长度为 M 的 LCS
序列下标从 1 开始 返回 LCS 长度
*****************************************************/
int dp[maxn];
int LCS(int n, int m)
{
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= n; i++)
{
int tmp = 0; // 存 i 确定, 且 a[i] > b[j] 时最大的 dp[j]
for(int j = 1; j <= m; j++)
{
if(a[i] > b[j] && dp[j] > tmp)
tmp = dp[j];
else if(a[i] == b[j])
dp[j] = tmp+1;
}
} int ans = 0;
for(int i = 1; i <= m; i++)
ans = max(ans, dp[i]);
return ans;
}

LCS/LIS/LCIS 模板总结的更多相关文章

  1. LCS,LIS,LCIS

    网站:CSUST 8月3日(LCS,LIS,LCIS) LCS:      以下讲解来自:http://blog.csdn.net/yysdsyl/article/details/4226630 [问 ...

  2. LCS,LIS,LCIS学习

    for(int i = 1;i <= n;i++) { int dpmax = 0; for(int j = 1;j <= m;j++) { dp[i][j] = dp[i-1][j]; ...

  3. hdu 1423(LCS+LIS)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1423 好坑啊..还有公共串为0时的特殊判断,还有格式错误..看Discuss看知道除了最后一组测试数据 ...

  4. 【ACM程序设计】动态规划 第二篇 LCS&LIS问题

    动态规划 P1439 [模板]最长公共子序列 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 给出 1,2,-,n 的两个排列 P1 和 P2 ,求它们的最长公共子序列. ...

  5. LCS(记录路径)+LIS+LCIS

    https://blog.csdn.net/someone_and_anyone/article/details/81044153 当串1 和 串2 的位置i和位置j匹配成功时, dp[i][j]=d ...

  6. LCS+LIS

    #include<iostream> #include<string> using namespace std; string a,b; ][]; int main() { w ...

  7. Uva 10635 - Prince and Princess LCS/LIS

    两个长度分别为p+1和q+1的由1到n2之前的整数组成的序列,每个序列的元素各不相等,两个序列第一个元素均为1.求两个序列的最长公共子序列 https://uva.onlinejudge.org/in ...

  8. 最长公共子序列模板(LCS)和LICS模板

    递归式: 实例图解: 代码: #include<stdio.h> #include<string.h> ; int dp[N][N],f[N][N]; char a[N],b[ ...

  9. 【LCS,LIS】最长公共子序列、单调递增最长子序列

    单调递增最长子序列 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4   输入 ...

随机推荐

  1. hdu1010Tempter of the Bone(dfs+奇偶剪枝)

    题目链接:pid=1010">点击打开链接 题目描写叙述:给定一个迷宫,给一个起点和一个终点.问是否能恰好经过T步到达终点?每一个格子不能反复走 解题思路:dfs+剪枝 剪枝1:奇偶剪 ...

  2. c#动态类型

    class Program { static void Main(string[] args) { dynamic test = new ExpandoObject(); test.Name = &q ...

  3. atitti.atiNav 手机导航组件的设计

    atitti.atiNav 手机导航组件的设计 1.1. 三大按键导航功能,back,menu ,home1 1.2. header页头组件,为移动页面顶部的导航条设计.1 1.3. 页头主题设计1 ...

  4. 为什么 Objective-C 很难

    转自:http://www.oschina.net/question/213217_41058 作为一个Objective-C的coder,我总能听到一部分人在这门语言上抱怨有很多问题.他们总在想快速 ...

  5. 解决Jenkins无法编译Egret5.0项目的问题

    问题的原因可查看:https://blog.csdn.net/sujun10/article/details/75512929 解决 造成这个问题的原因是用户权限分配,你可以通过下面几步解决,而非改e ...

  6. MySQL 记录中包含换行符

    换行符: \r\n \r CHAR(10) 处理方法: REPLACE(str,from_str,to_str); 如:REPLACE('aaa\nbbb','\n','');

  7. 如何查看iis的连接数量

    引用:http://jingyan.baidu.com/article/54b6b9c0f3c2002d583b470d.html 运行,输入,perfmon.msc.   在系统监视器,区域点击,添 ...

  8. Oracle Explain plan 使用总结

    Oracle Explain plan使用总结    写多了SQL语句,伴随着数据量的海增,总会遇到性能的问题.在Oracle领域一个不好的习惯,一旦遇到性能问题就推给DBA来做.长期如此,反而对DB ...

  9. Servlet -doGet() doPost()原理

    一.自定义类只需要重写doGet(HttpServletRequest request, HttpServletResponse response) 和doPost(HttpServletReques ...

  10. 3G模块(U6300)linux下拨号上网

    U6300支持linux.Android系列嵌入式系统.作为linux内核系统,系统均会自带驱动usbserial,就没有提供专门的U6300V的USB驱动,都是加载系统的usbserial以实现对U ...