首先$LIS$显然:$f[i][j]=max(f[i][j-1],f[i-1][j],(a[i]==b[j])*f[i-1][j-1])$

考虑如何转移数量:

首先,不管$a[i]$是否等于$b[j]$,

都有$h[i][j]+=h[i-1][j]*(f[i][j]==f[i-1][j])+h[i][j-1]*(f[i][j]==f[i][j-1])$

然后讨论$LIS$中第三种转移:

如果$a[i]==b[j]\ \&\&\ f[i][j]==f[i-1][j-1]+1$,有$h[i][j]+=h[i-1][j-1]$

而如果$a[i]!=b[j]\ \&\&\ f[i][j]==f[i-1][j-1]$,有$h[i][j]-=h[i-1][j-1]$,此处是考虑$h[i-1][j]$与$h[i][j-1]$对答案的重复转移,所以要减去;

#include<cstdio>
#include<iostream>
#include<cstring>
#define R register int
using namespace std;
namespace Fread {
static char B[<<],*S=B,*D=B;
#define getchar() (S==D&&(D=(S=B)+fread(B,1,1<<15,stdin),S==D)?EOF:*S++)
inline int g() {
R ret=,fix=; register char ch; while(!isdigit(ch=getchar())) fix=ch=='-'?-:fix;
do ret=ret*+(ch^); while(isdigit(ch=getchar())); return ret*fix;
} inline bool isempty(const char& ch) {return ch<=||ch>=;}
inline void gs(char* s) {register char ch; while(isempty(ch=getchar())); do *s++=ch; while(!isempty(ch=getchar()));}
}using Fread::g; using Fread::gs;
const int N=,M=1E+;
int n,m; char s1[N],s2[N];
int f[][N],h[][N];
signed main() {
gs(s1+),gs(s2+); R l1=strlen(s1+)-,l2=strlen(s2+)-;
R c=; for(R i=;i<=l2;++i) h[c][i]=;
for(R i=;i<=l1;++i) {
c^=; h[c][]=;
for(R j=;j<=l2;++j) {
h[c][j]=;
f[c][j]=max(f[c^][j],f[c][j-]);
if(s1[i]==s2[j]) f[c][j]=max(f[c][j],f[c^][j-]+);
if(f[c][j]==f[c^][j]) h[c][j]+=h[c^][j];
if(f[c][j]==f[c][j-]) h[c][j]+=h[c][j-];
if(s1[i]==s2[j]&&f[c][j]==f[c^][j-]+) h[c][j]+=h[c^][j-];
if(s1[i]!=s2[j]&&f[c][j]==f[c^][j-]) h[c][j]-=h[c^][j-];
h[c][j]=(h[c][j]+M)%M;
}
} printf("%d\n%d\n",f[c][l2],h[c][l2]);
}

2019.07.11

Luogu P2516 [HAOI2010]最长公共子序列 DP的更多相关文章

  1. luogu P2516 [HAOI2010]最长公共子序列

    传送门 首先那个\(O(n^2)\)的dp都会吧,不会自己找博客或者问别人,或是去做模板题(误) 对以下内容不理解的,强势推荐flash的博客 我们除了原来记录最长上升子序列的\(f_{i,j}\), ...

  2. 2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组)

    2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组) https://www.luogu.com.cn/problem/P2516 题意: 给定字符串 \(S\) ...

  3. 【BZOJ2423】[HAOI2010]最长公共子序列 DP

    [BZOJ2423][HAOI2010]最长公共子序列 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...

  4. 洛谷P2516 [HAOI2010]最长公共子序列(LCS,最短路)

    洛谷题目传送门 一进来就看到一个多月前秒了此题的ysn和YCB%%% 最长公共子序列的\(O(n^2)\)的求解,Dalao们想必都很熟悉了吧!不过蒟蒻突然发现,用网格图貌似可以很轻松地理解这个东东? ...

  5. 洛谷 P2516 [HAOI2010]最长公共子序列

    题目传送门 解题思路: 第一问要求最长公共子序列,直接套模板就好了. 第二问要求数量,ans[i][j]表示第一个字符串前i个字符,第二个字符串前j个字符的最长公共子序列的数量 如果f[i][j]是由 ...

  6. P2516 [HAOI2010]最长公共子序列 题解(LCS)

    题目链接 最长公共子序列 解题思路 第一思路: 1.用\(length[i][j]\)表示\(a\)串的前\(i\)个字符与\(b\)串的前\(j\)个字符重叠的最长子串长度 2.用\(num[i][ ...

  7. 洛谷P2516 [HAOI2010]最长公共子序列

    题目描述 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  8. P2516 [HAOI2010]最长公共子序列

    传送门 看到数据范围,显然 $n^2$ 的 $dp$... 设 $f[i][j]$ 表示 $A$ 串考虑了前 $i$ 位,$B$ 串考虑了前 $j$ 位,最优情况下的方案数 但是好像没法判断转移来的是 ...

  9. [BZOJ2423][HAOI2010]最长公共子序列

    [BZOJ2423][HAOI2010]最长公共子序列 试题描述 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x ...

随机推荐

  1. 【LOJ】#2239. 「CQOI2014」危桥

    LOJ#2239. 「CQOI2014」危桥 就是先把每条边正着连一条容量为2的边,反着连一条容量为2的边 显然如果只有一个人走的话,答案就是一个源点往起点连一条容量为次数×2的边,终点往汇点连一个次 ...

  2. javaweb配置连接mysql数据库

    1.首先新建基础连接类BaseDao,在这里配置链接的数据库名称,用户名以及密码,以及执行读与写操作的父方法,代码如下: package com.demo.dao; import java.sql.D ...

  3. c# bitmap的拷贝及一个图像工具类

    using (Bitmap bmp = new Bitmap(scanImgPath)) { Bitmap bitmap = new Bitmap(bmp.Width, bmp.Height, Pix ...

  4. 【调试经验】C++和C的混合编程以及库调用

    问题背景 这两天在移植一个开源的库,偏底层的那种,所以对架构有一些依赖.源码的编译是通过Makefile来构建,怎奈公司的架构用的是CMAKE,所以就在开源的顶层和子目录分别构建了CMakeList, ...

  5. composer在windows下安装并且设置全局变量

    Composer是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. 1丶使用安 ...

  6. jupyter的控件交互

    jupyter实现控件交互 jupyter notebook 是一个交互式IDE 直接上jupyter notebook界面截图

  7. axios 跨域携带cookie设置

    import axios from 'axios' // 创建axios实例 const service = axios.create({ baseURL: process.env.BASE_API, ...

  8. MySQL 设置密码和允许远程登录

    mysqladmin -u root password "newpass" GRANT ALL PRIVILEGES ON *.* TO root' WITH GRANT OPTI ...

  9. 【原创】编程基础之Jekins

    Jenkins 2.164.2 官方:https://jenkins.io 一 简介 Build great things at any scale The leading open source a ...

  10. vue.config.js基础配置

    const path = require('path') const UglifyPlugin = require('uglifyjs-webpack-plugin') module.exports ...