http://www.lightoj.com/volume_showproblem.php?problem=1013

题目大意:

给两个字符串,问最短的满足子串包含给的两个字符串的字符串的最短长度,以及最短长度的字符串的个数。

第一个问题就是简单的LCS,两个串长度和减去公共部分。

第二个问题要进行记忆话搜索来查找。dp(i,j,l)(第一个串i位,第二个串j位,总串l位)

转移方程

dp(i,j,l) = dp(i-1,j-1,l-1) (s1[i] = s2[j]时)

dp(i,j,l) = dp(i-1,j,l-1) + dp(i, j-1, l-1) (s1[i] != s2[j]时)

#include <stdio.h>
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#include <string>
#include <math.h>
using namespace std;
typedef pair<int,int> P;
typedef long long LL;
const int INF = 0x3f3f3f3f;
const double PI = acos(-1.0);
const double eps = 1e-9;
const int N = 30 + 5;
int t,n,m,len,kase = 0;
int dp1[N][N];
LL dp2[N][N][2*N];
char s1[N],s2[N];
int lcs()
{memset(dp1, 0, sizeof(dp1));for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){if(s1[i] == s2[j])dp1[i][j] = dp1[i-1][j-1] + 1;elsedp1[i][j] = max(dp1[i-1][j], dp1[i][j-1]);}}return dp1[n][m];
}LL dfs(int i, int j, int l)
{LL &ans = dp2[i][j][l];if(ans != -1) return ans;else if(l == 0) return i == 0 && j == 0;else if(i == 0) return ans = dfs(i, j-1, l-1);else if(j == 0) return ans = dfs(i-1, j, l-1);else if(s1[i] == s2[j]) return ans = dfs(i-1, j-1, l-1);else return ans = dfs(i-1, j, l-1) + dfs(i, j-1, l-1);
}int main()
{scanf("%d", &t);while(t--){scanf("%s%s", s1+1, s2+1);n = strlen(s1+1);m = strlen(s2+1);len = n + m - lcs();memset(dp2, -1, sizeof(dp2));printf("Case %d: %d %lld\n", ++kase, len, dfs(n,m,len));}return 0;
}

转载于:https://www.cnblogs.com/Alruddy/p/7336896.html

LightOJ 1013 LCS+记忆化搜索相关推荐

  1. Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]

    题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...

  2. 动态规划+深度优先搜索+记忆化搜索(干货满满)

    动态规划的定义 动态规划算法与分治法的思想类似,都是通过组合子问题的解来求原问题.我先来给大家介绍一下分治思想,分治思想就是把一个复杂的问题,分解为k个规模相同的子问题,如果还是无法解决,子问题又可以 ...

  3. 洛谷P1057 传球游戏(记忆化搜索)

    点我进入题目 题目大意:n个小孩围一圈传球,每个人可以给左边的人或右边的人传球,1号小孩开始,一共传m次,请问有多少种可能的路径使球回到1号小孩. 输入输出:输入n,m,输出路径的数量. 数据范围:4 ...

  4. 图论 ---- F. Graph Traveler 记忆化搜索 + 思维预处理(数论同余恒等式)

    题目链接 题目大意: q∈[1,1e5],n∈[1,1000],mi∈[1,10]q\in[1,1e5],n\in[1,1000],m_i\in[1,10]q∈[1,1e5],n∈[1,1000],m ...

  5. 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]

    题目链接 题目大意: 就是给你n个平面和一个寿命为k的衰变粒子.开始粒子从左向右飞行,粒子每经过一个平面就会产生一个副本粒子,这个副本粒子比原粒子的寿命少1,即为k-1,并且飞行方向是原粒子的反方向. ...

  6. BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...

  7. UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)

    整理的算法模板合集: ACM模板 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形. 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b) ...

  8. [P1434 [SHOI2002]滑雪](DFS,记忆化搜索)

    P1434 [SHOI2002]滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你 ...

  9. hdu 4722(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. 1 #include<iost ...

最新文章

  1. 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
  2. Windows获取CPU、内存和磁盘使用率脚本
  3. CSDN光合计划-纯干货-推荐几个Java全系列学习教程
  4. python神经网络调节参数_神经网络进阶-用python实现一个完整的神经网络框架并在CIFAR10数据集上调参...
  5. SQL Server 数据库多表查询
  6. 浅析JavaScript和PHP中三个等号(===)和两个等号(==)的区别
  7. 网页整个技术文档怎么拷贝_企业文档管理混乱?试试文档管理系统
  8. c语言实现语音检测vad_AI大语音(二)——语音预处理
  9. fisco bcos应用开发(一) springboot报错 Error reading resource
  10. Unity 3D ScrollView控件(滚动视图)
  11. 云计算是什么?云计算开发学习路线
  12. android 动态 设置layout_weight,android - 如何从代码中动态设置layout_weight属性?
  13. 移动开发技术(Android)——实验8 SQLite数据库的使用
  14. gaussian窗口函数_几种常见窗函数及其matlab应用
  15. android 应用程序Activity管理类
  16. python-函数的递归
  17. elementui穿梭框数据不更新
  18. Java实现deflate算法的压缩和解压
  19. 联想硬盘保护系统从6.5升级到7.6 过程概要
  20. Puppeteer 用来做爬虫太 Low 了!但用在这里很合适!

热门文章

  1. 操作符union/union all、intersect、minus、(not)exist
  2. send,recv,sendto,recvfrom
  3. 如何实现红帽企业虚拟化管理平台Host主机所在数据中心的切换
  4. Closure--1
  5. Mike Krueger 加入Mono团队
  6. java编译大项目很慢_优化MyEclipse编译速度慢的问题、build、project clean 慢
  7. 三星w2014android,三星W2014评测:机身细节及内部设计
  8. 500个爆文标题_美食爆文大放送 | 烹饪技巧从细节着手,夏日消暑美食最为应时...
  9. java 监听多个按键_如何在所有组件中监听按键(在Java Swing中)?
  10. MyBatis 原理