[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. 把数据库中的数据制作成Excel数据

    把数据库中的数据制作成Excel数据 如果我们在使用Excel的时候,需要把数据库中的数据制作成Excel数据透视表,我们该怎么操作呢?如果数据在数据库中,我们不用把数据导入到工作表中,我们可以直接以 ...

  2. 2019_Chrome和ChromeDriver对应关系

    Chrome和ChromeDriver对应关系 ChromeDriver下载地址:http://chromedriver.storage.googleapis.com/index.html Chrom ...

  3. js变量和数据类型

  4. Hadoop and Big Data

    Hadoop(1): HDFS Basics Hadoop(2):HDFS Block Management Hadoop(3): Prepare inputs for MapReduce mappe ...

  5. python每日一练:0001题

    第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? import o ...

  6. windows和linux中查看端口占用情况并kill掉对应进程

    好几次在不同的情况下遇到 需要查看端口信息 并且kill掉对应进程的情况 相关的参数总是记不全 在这里记录下 以后查看方便 windows中查看正在使用端口的信息netstat -ano|findst ...

  7. js之状态模式

    level01:电灯程序 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...

  8. redis两种持久化的方法

    Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计算集合的并,交和补集(diff ...

  9. [Python3 练习] 005 汉诺塔1 递归解法

    题目:汉诺塔 I (1) 描述 传说,在世界中心贝拿勒斯(在印度北部)的圣庙外有左中右三根足够长的柱子(塔) 左边柱子上套着 64 片金片,金片按"上小下大"排,其余两根是空柱子 ...

  10. java变量的类型

    变量的类型 一 按数据类型分: 1.基本数据类型 : 整型 : byte (1字节 -   (-128  ~  127)) short (2字节) int (4字节) long (8字节) 浮点型 : ...