[HAOI2010] 最长公共子序列

求S串与T串的 最长公共子序列长度 及其 个数.

动态规划递推式:

\[f(i,j)=\max\left\{ f(i-1,j), f(i,j-1) \right\} \quad (S_i\neq T_j)
\]

\[f(i,j)=\max\left\{\text{ $^{(\varphi)}$ } f(i-1,j), f(i,j-1), \text{ $^{(\lambda)}$ } f(i-1,j-1)+1 \right\} \quad (S_i= T_j)
\]

\[g(i,j)= g(i-1,j) + g(i,j-1) - g(i-1, j-1) \quad \left(S_i\neq T_j\text{ and }f(i,j)=f(i-1,j-1)\ \right)
\]

\[g(i,j)= g(i-1,j) + g(i,j-1) + g(i-1, j-1) \quad \left(S_i= T_j\text{ and }(\lambda)\ \right)
\]

滚动数组压缩空间.

#include <cstdio>
#include <cstring>
#include <algorithm>
const int mod=100000000;
char S[5003], T[5003];
int sl, tl;
int f[2][5003], g[2][5003]; int main() {
scanf("%s", S+1);
scanf("%s", T+1);
sl=strlen(S+1)-1;
tl=strlen(T+1)-1;
for (register int i=0; i<=tl; ++i) g[0][i]=1;
for (register int i=1; i<=sl; ++i) {
g[i&1][0]=1;
for (register int j=1; j<=tl; ++j) {
g[i&1][j]=0;
f[i&1][j]=std::max(f[i&1^1][j], f[i&1][j-1]);
if (S[i]==T[j]) f[i&1][j]=std::max(f[i&1][j], f[i&1^1][j-1]+1);
if (f[i&1][j]==f[i&1^1][j]) g[i&1][j]+=g[i&1^1][j];
if (f[i&1][j]==f[i&1][j-1]) g[i&1][j]+=g[i&1][j-1];
if (S[i]==T[j] && f[i&1][j]==f[i&1^1][j-1]+1) g[i&1][j]+=g[i&1^1][j-1];
if (S[i]!=T[j] && f[i&1][j]==f[i&1^1][j-1]) g[i&1][j]-=g[i&1^1][j-1];
g[i&1][j]=(g[i&1][j] + mod) % mod;
}
}
printf("%d\n%d\n", f[sl&1][tl], g[sl&1][tl]);
return 0;
}

23 October的更多相关文章

  1. centos各版本信息

    CentOS version Architectures RHEL base Kernel CentOS release date RHEL release date Delay (days) 2.1 ...

  2. CentOS和Redhat发行版linux内核版本的对应关系

    由于Redhat和CentOS的发行版本现在众多,所以我们应该知道CentOS和Redhat及linux内核之间版本的对应关系对维护系统还是很有帮助的.对应的列表如下: Redhat 9.0————— ...

  3. 1.Tsung介绍(翻译)

    1.介绍 1.1什么是Tsung? Tsung(以前是IDX-Tsunami)是一种分布式负载测试工具.它是基于协议的,并且通常被用于压测HTTP, WebDAV, SOAP, PostgreSQL, ...

  4. 使用limma、Glimma和edgeR,RNA-seq数据分析易如反掌

    使用limma.Glimma和edgeR,RNA-seq数据分析易如反掌 Charity Law1, Monther Alhamdoosh2, Shian Su3, Xueyi Dong3, Luyi ...

  5. Docker容器技术-在开发中引用Docker

    明确一点: 容器不适合构建那种发布周期以周或月为单位的大型单一架构企业软件,容器适合采用微服务的方式,以及探索诸如持续部署这样的技术,使得我们能安全地在一天内多次更新生产环境. 一.在开发中引用Doc ...

  6. 【wiki】红帽linux

    Red Hat Enterprise Linux From Wikipedia, the free encyclopedia wiki 上面红帽的版本信息. https://en.wikipedia. ...

  7. October 23, 2013 - Fires and smoke in eastern China

    October 23, 2013 - Fires and smoke in eastern China Satellite: Aqua Date Acquired: 10/12/2013 Resolu ...

  8. Notes of the scrum meeting(2013/10/23)

    ps:本来是10月23号周三下午开的会,这几天由于各种事情忙,忘记写博客了,现在补上. 软工项目组buaa_smile开始项目第一次scrum meeting meeting time:4:00~5: ...

  9. Python学习笔记23:Django构建一个简单的博客网站(一个)

    在说如何下载和安装Django,本节将重点讨论如何使用Django站点. 一 新建project 命令:django-admin startproject mysite # 有的须要输入:django ...

随机推荐

  1. Java 基础-IO、stream 流、文件操作

    输入输出流的分类 在 java.io 包中,包含了输入输出操作所需的类. I/O 流可以安装不同的标准分类: 按照流的方向分类: 输入流:将信息从代码外部输入代码 输出流:将代码得到的数据输出到文件. ...

  2. python基础-9.2 单例模式

    设计模式 一.单例模式 单例,顾名思义单个实例.创建一个实例 链接池案例 1.单例=>只有一个实例 2.静态方法+静态字段 3.所有的实例中封装的内容相同时用单例模式 class Connect ...

  3. Java学习day11-类的成员之三:构造器(构造方法)

    一.构造器(构造方法) 语法格式: 修饰符 类名(参数列表){ 初始化语句: } 构造器的特征: 1.它具有与类相同的名称 2.它不声明返回值类型.(与声明为void不同) 3.不能被static.f ...

  4. C89标准和C99标准C11标准的区别

    转载 C89标准和C99标准C11标准的区别 C99对C89的改变 1.增加restrict指针 C99中增加了公适用于指针的restrict类型修饰符,它是初始访问指针所指对象的惟一途径,因此只有借 ...

  5. [SPOJ]Count on a tree II(树上莫队)

    树上莫队模板题. 使用欧拉序将树上路径转化为普通区间. 之后莫队维护即可.不要忘记特判LCA #include<iostream> #include<cstdio> #incl ...

  6. 百度文档,用Python一键免费下载

    百度文库下载需要券,或者vip才能下载 Vip价格高,偶尔下载一次不划算. 不下载复制?不好意思复制也需要vip否则只能一次复制两行. 如何才能以最低成本获取到百度文库里的文档内容呢? 当然是用Pyt ...

  7. ecshop 2.7 PC 微信扫描支付配置教程

    在ecshop支付过程中,有些是没有微信支付的,需要自己添加微信支付的模块,那么怎么添加呢,添加过程需要调试,本人花了很长时间才调试成功的pc微信扫描支付, 1,数据库添加微信支付方模块 2,后台设置 ...

  8. 1897. tank 坦克游戏

    传送门 显然考虑 $dp$,发现时间只和当前位置和攻击次数有关,设 $F[i][j][k]$ 表示当前位置为 $i,j$ ,攻击了 $k$ 次得到的最大分数 初始 $f[1][1][k]$ 为位置 $ ...

  9. CSS3实现小于1px的边框(移动端)

    <!doctype html> <html lang="en"> <head> <meta content="width=dev ...

  10. Hls平台实现sobel算法(一)

    索贝尔(Sobel)算子主要用于边缘检测,根据像素点的上下.左右邻点的灰度加权差与阈值进行比较,在边缘处达到极值的方法实现边缘检测. -------------序 一.原理性运行 流水线操作,将输入图 ...