本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作。

本文作者:ljh2000
作者博客:http://www.cnblogs.com/ljh2000-jump/
转载请注明出处,侵权必究,保留最终解释权!

题目链接:BZOJ2423

正解:DP

解题报告:

  考虑用f[i][j]表示第一个字符序列的前i位与第二个字符序列的前j位的最长公共子序列长度,那么转移的就直接根据这一位是否对应相等转即可:

  f[i][j]=f[i-1][j-1]+1(a[i]=b[j]);f[i][j]=max(f[i][j-1],f[i-1][j])(a[i]!=b[j])。

  第二问有一点麻烦…

  要讨论一下每个取值在哪取到,不能算重了…

  考虑一下f[i][j]和之前的哪些相同,yy一下就可以咯。

//It is made by ljh2000
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <ctime>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <string>
#include <complex>
using namespace std;
typedef long long LL;
typedef long double LB;
typedef complex<double> C;
const double pi = acos(-1);
const int MAXN = 5011;
const int mod = 100000000;
char ch[MAXN],s[MAXN];
int n,m,f[2][MAXN],g[2][MAXN];inline int getint(){int w=0,q=0; char c=getchar(); while((c<'0'||c>'9') && c!='-') c=getchar();if(c=='-') q=1,c=getchar(); while (c>='0'&&c<='9') w=w*10+c-'0',c=getchar(); return q?-w:w;
}inline void work(){scanf("%s",ch+1); scanf("%s",s+1);n=strlen(ch+1); m=strlen(s+1); n--; m--;for(int i=0;i<=m;i++) g[0][i]=1;//边界!int tag=0; g[1][0]=1;for(int i=1;i<=n;i++) {tag^=1; //memset(f[tag],0,sizeof(f[tag]));//memset(g[tag],0,sizeof(g[tag]));for(int j=1;j<=m;j++) {if(ch[i]==s[j]) {f[tag][j]=f[tag^1][j-1]+1;g[tag][j]=g[tag^1][j-1];g[tag][j]+=(f[tag][j]==f[tag^1][j])*g[tag^1][j];g[tag][j]+=(f[tag][j]==f[tag][j-1])*g[tag][j-1];}else {f[tag][j]=max(f[tag][j-1],f[tag^1][j]);g[tag][j]=(f[tag][j]==f[tag^1][j])*g[tag^1][j];g[tag][j]+=(f[tag][j]==f[tag][j-1])*g[tag][j-1];g[tag][j]-=(f[tag][j]==f[tag^1][j-1])*g[tag^1][j-1];}g[tag][j]%=mod;}}printf("%d\n",f[tag][m]);g[tag][m]+=mod; g[tag][m]%=mod;printf("%d",g[tag][m]);
}int main()
{work();return 0;
}

  

转载于:https://www.cnblogs.com/ljh2000-jump/p/6506745.html

BZOJ2423 [HAOI2010]最长公共子序列相关推荐

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

    bzoj2423[HAOI2010]最长公共子序列 题意: 求两个字符串的最长公共子序列长度和个数.字符串长度均≤5000. 题解: dp,设f[i][j]表示x串i位到末位,y串j位到末位的最长长度 ...

  2. [DP] bzoj2423: [HAOI2010]最长公共子序列

    bzoj2423: [HAOI2010]最长公共子序列:https://www.lydsy.com/JudgeOnline/problem.php?id=2423 DP 神啊(DP都是神奇的东西) 第 ...

  3. LGOJ P2516 BZOJ2423 [HAOI2010]最长公共子序列 解题报告

    文章目录 题目链接 解题思路 对于第一问,这是LCS问题的经典模型 对于第二问,同样用DP来做 详细代码 题目链接 LGOJ BZOJ 解题思路 对于第一问,这是LCS问题的经典模型 我们设f[i][ ...

  4. BZOJ2423/HAOI2010 最长公共子序列

    思路: 非常经典的问题就不讲了.后面求方案的时候注意不要忘记讨论情况. 还有要滚动一维. #include<iostream> #include<cstdio> #includ ...

  5. BZOJ 2423: [HAOI2010]最长公共子序列

    2423: [HAOI2010]最长公共子序列 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1696  Solved: 674 [Submit][ ...

  6. 【BZOJ2423】最长公共子序列(动态规划)

    [BZOJ2423]最长公共子序列(动态规划) 题面 BZOJ 洛谷 题解 今天考试的时候,神仙出题人\(fdf\)把这道题目作为一个二合一出了出来,我除了orz还是只会orz. 对于如何\(O(n^ ...

  7. 【bzoj2423】最长公共子序列[HAOI2010](dp)

    题目传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2423 题目大意:求两个字符串的最长公共子序列长度和最长公共子序列个数. 这道题的话,对于 ...

  8. 10.31T4 HAOI2010最长公共子序列 计数+容斥原理

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

  9. bzoj 2423 [HAOI2010]最长公共子序列 动态规划

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

最新文章

  1. Java XML解析工具 dom4j介绍及使用实例
  2. 【Netty】NIO 简介 ( NIO 模型 | NIO 三大组件 | 选择器 Selector | 通道 Channel | 缓冲区 Buffer | NIO 组件分配 | 缓冲区示例 )
  3. vue中textarea标签自适应高度
  4. 高并发编程-线程通信_使用wait和notify进行线程间的通信
  5. iOS游戏开发教程资源
  6. 读”SQL Injection Pocket Reference”之摘录
  7. 2020蓝桥杯省赛---java---B---7(单词分析)
  8. MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)...
  9. rabbitmq技术的一些感悟(二)
  10. 为SQL缓存通知启用数据库
  11. js去掉所有html标记
  12. u盘安装linux系统有什么弊端,使用U盘安装Linux系统的经验总结
  13. Android中屏蔽返回键,HOME键以及模拟HOME键返回效果的方法
  14. 游戏官网的HTML布局,游戏网站页面布局关键
  15. 音频剪切matlab,科学网—matlab的音频处理:读取,裁剪,输出和命名 - 张智昊的博文...
  16. 理解偏导数、梯度、方向导数
  17. 金蝶云苍穹轻量级开发人员申请试用
  18. vue学习笔记 DAY1 P1~P6
  19. Vue响应式实现原理
  20. 计算机基础知识截屏,电脑截屏技巧 截图快捷键是什么

热门文章

  1. 微信小程序真机调试和开发工具调试问题解决
  2. 中小学计算机课标,中小学信息技术课程标准(新课标)
  3. 小写转大写,大写转小写,数字不显示
  4. (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  5. ES(ElasticSearch)自定义分词字典
  6. MATLAB怎么样绘制扭转减震器,基于MATLAB的汽车减震系统仿真建模
  7. 苏州新导养老院看护系统,实现一对一智能看护,智能化养老院逐渐兴起
  8. Unity3D开发之控制摄像机移动
  9. 试着使用SDL2复刻曹操传(二)
  10. 魔兽怀旧服wowlua api获取人物坐标信息