LightOJ 1013 LCS+记忆化搜索
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+记忆化搜索相关推荐
- Discovering Gold LightOJ - 1030[概率dp或者记忆化搜索]
题目大意:有一个[1,n][1,n][1,n]的数轴,数轴上的每个对应位置上都有金矿,你初始位置是1,然后你每次都会投色子决定你下一步跳到哪里,如果你跳出了nnn,那么你就要重新投.问你跳到nnn的时 ...
- 动态规划+深度优先搜索+记忆化搜索(干货满满)
动态规划的定义 动态规划算法与分治法的思想类似,都是通过组合子问题的解来求原问题.我先来给大家介绍一下分治思想,分治思想就是把一个复杂的问题,分解为k个规模相同的子问题,如果还是无法解决,子问题又可以 ...
- 洛谷P1057 传球游戏(记忆化搜索)
点我进入题目 题目大意:n个小孩围一圈传球,每个人可以给左边的人或右边的人传球,1号小孩开始,一共传m次,请问有多少种可能的路径使球回到1号小孩. 输入输出:输入n,m,输出路径的数量. 数据范围: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 ...
- 思维dp ---- Codeforces Round #711 (Div. 2) - C. Planar Reflections[dp/记忆化搜索]
题目链接 题目大意: 就是给你n个平面和一个寿命为k的衰变粒子.开始粒子从左向右飞行,粒子每经过一个平面就会产生一个副本粒子,这个副本粒子比原粒子的寿命少1,即为k-1,并且飞行方向是原粒子的反方向. ...
- BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...
- UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)
整理的算法模板合集: ACM模板 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形. 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b) ...
- [P1434 [SHOI2002]滑雪](DFS,记忆化搜索)
P1434 [SHOI2002]滑雪 题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你 ...
- hdu 4722(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4722 思路:简单的记忆化搜索,留意一下A==0时的情况就可以了. 1 #include<iost ...
最新文章
- 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
- Windows获取CPU、内存和磁盘使用率脚本
- CSDN光合计划-纯干货-推荐几个Java全系列学习教程
- python神经网络调节参数_神经网络进阶-用python实现一个完整的神经网络框架并在CIFAR10数据集上调参...
- SQL Server 数据库多表查询
- 浅析JavaScript和PHP中三个等号(===)和两个等号(==)的区别
- 网页整个技术文档怎么拷贝_企业文档管理混乱?试试文档管理系统
- c语言实现语音检测vad_AI大语音(二)——语音预处理
- fisco bcos应用开发(一) springboot报错 Error reading resource
- Unity 3D ScrollView控件(滚动视图)
- 云计算是什么?云计算开发学习路线
- android 动态 设置layout_weight,android - 如何从代码中动态设置layout_weight属性?
- 移动开发技术(Android)——实验8 SQLite数据库的使用
- gaussian窗口函数_几种常见窗函数及其matlab应用
- android 应用程序Activity管理类
- python-函数的递归
- elementui穿梭框数据不更新
- Java实现deflate算法的压缩和解压
- 联想硬盘保护系统从6.5升级到7.6 过程概要
- Puppeteer 用来做爬虫太 Low 了!但用在这里很合适!
热门文章
- 操作符union/union all、intersect、minus、(not)exist
- send,recv,sendto,recvfrom
- 如何实现红帽企业虚拟化管理平台Host主机所在数据中心的切换
- Closure--1
- Mike Krueger 加入Mono团队
- java编译大项目很慢_优化MyEclipse编译速度慢的问题、build、project clean 慢
- 三星w2014android,三星W2014评测:机身细节及内部设计
- 500个爆文标题_美食爆文大放送 | 烹饪技巧从细节着手,夏日消暑美食最为应时...
- java 监听多个按键_如何在所有组件中监听按键(在Java Swing中)?
- MyBatis 原理