BZOJ2423 HAOI2010最长公共子序列(动态规划)
大讨论。注意去重。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 5010
#define P 100000000
int n,m,f[][N],g[][N];
char a[N],b[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj2423.in","r",stdin);
freopen("bzoj2423.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
char c=getchar();
while (c>='A'&&c<='Z') a[++n]=c,c=getchar();
a[++n]=c,c=getchar();
while (c<'A'||c>'Z') c=getchar();
while (c>='A'&&c<='Z') b[++m]=c,c=getchar();
b[++m]=c,c=getchar();
for (int j=;j<=m;j++) g[][j]=;
for (int i=;i<=n;i++)
{
memset(f[i&],,sizeof(f[i&]));
memset(g[i&],,sizeof(g[i&]));
g[i&][]=;
for (int j=;j<=m;j++)
if (a[i]!=b[j])
{
f[i&][j]=max(f[i&^][j],f[i&][j-]);
if (f[i&^][j]==f[i&][j-])
{
if (f[i&^][j]==f[i&^][j-]) g[i&][j]=((g[i&^][j]+g[i&][j-])%P-g[i&^][j-]+P)%P;
else g[i&][j]=(g[i&^][j]+g[i&][j-])%P;
}
else if (f[i&^][j]>f[i&][j-]) g[i&][j]=g[i&^][j];
else g[i&][j]=g[i&][j-];
}
else
{
f[i&][j]=f[i&^][j-]+;
g[i&][j]=g[i&^][j-];
if (f[i&][j]==f[i&^][j]) g[i&][j]=(g[i&][j]+g[i&^][j])%P;
if (f[i&][j]==f[i&][j-]) g[i&][j]=(g[i&][j]+g[i&][j-])%P;
}
}
cout<<f[n&][m]-<<endl<<g[n&][m];
return ;
}
BZOJ2423 HAOI2010最长公共子序列(动态规划)的更多相关文章
- [BZOJ2423][HAOI2010]最长公共子序列
[BZOJ2423][HAOI2010]最长公共子序列 试题描述 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x ...
- 【BZOJ2423】最长公共子序列(动态规划)
[BZOJ2423]最长公共子序列(动态规划) 题面 BZOJ 洛谷 题解 今天考试的时候,神仙出题人\(fdf\)把这道题目作为一个二合一出了出来,我除了orz还是只会orz. 对于如何\(O(n^ ...
- 【BZOJ2423】[HAOI2010]最长公共子序列 DP
[BZOJ2423][HAOI2010]最长公共子序列 Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字 ...
- 2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组)
2021.12.10 P2516 [HAOI2010]最长公共子序列(动态规划+滚动数组) https://www.luogu.com.cn/problem/P2516 题意: 给定字符串 \(S\) ...
- 【bzoj2423】最长公共子序列[HAOI2010](dp)
题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2423 题目大意:求两个字符串的最长公共子序列长度和最长公共子序列个数. 这道题的话,对于 ...
- 【ACM】最长公共子序列 - 动态规划
最长公共子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 咱们就不拐弯抹角了,如题,需要你做的就是写一个程序,得出最长公共子序列.tip:最长公共子序列也称作最 ...
- C++求解汉字字符串的最长公共子序列 动态规划
近期,我在网上看了一些动态规划求字符串最长公共子序列的代码.可是无一例外都是处理英文字符串,当处理汉字字符串时.常常会出现乱码或者不对的情况. 我对代码进行了改动.使用wchar_t类型存储字 ...
- bzoj:2423: [HAOI2010]最长公共子序列
Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...
- [HAOI2010]最长公共子序列(LCS+dp计数)
字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0,y1,…,yk-1”是X ...
随机推荐
- 添加静态路由 route add -host 子网掩码 -- 在线解析
1.215 ----- R(172.16.0.1) <--------- gw(61.146.164.109) | ...
- MVC的BundleConfig类
在BundleConfig.cs文件中,包含了一些应用程序中使用的脚本和样式表的文件路径.并可以使用通配符.示例如下: using System.Web; using System.Web.Optim ...
- php 操作时间、日期类函数
<?php // time() echo "time(): ",time(); echo "\n"; // strtotime() echo " ...
- Android Layout属性笔记
android:id 为控件指定相应的ID android:text 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串 android:gravity 指定Vi ...
- Android Environment.getExternalStorageDirectory() 获取的是内部存储还是外部存储? - z
这几天在做Android应用的远程更新功能,将下载的更新包放在移动设备上指定的目录.用的是 Environment.getExternalStorageDirectory() 这个方法,然后在获取的 ...
- js开关插件使用
一.简介 本篇文章介绍一个比较好使用的js开关插件Switchery,该插件的样式是ios7的滑动按钮插件,并且将很多功能加入到配置项,简单.灵活,支持的绝大部分浏览器(Chrome, Firefox ...
- 20155337《网络对抗》Exp5 MSF基础应用
20155337<网络对抗>Exp5 MSF基础应用 实践目标 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如 ...
- 51nod 小朋友的笑话
链接 分析: 每次操作把以前没有出现这个数的设为1,有这个数的设为0.首先将当前区间设为1,考虑有set维护这个颜色出现的区间,然后把所有与当前区间相交的拿出来,修改为0. 复杂度?每次操作的线段只会 ...
- R语言学习 第一篇:变量和向量
R是向量化的语言,最突出的特点是对向量的运算不需要显式编写循环语句,它会自动地应用于向量的每一个元素.对象是R中存储数据的数据结构,存储在内存中,通过名称或符号访问.对象的名称由大小写字母.数字0-9 ...
- 关于运行“基于极限学习机ELM的人脸识别程序”代码犯下的一些错误
代码来源 基于极限学习机ELM的人脸识别程序 感谢文章主的分享 我的环境是 win10 anaconda Command line client (version 1.6.5)(conda 4.3.3 ...