求个LCS, 只是有了限制, 多加一维表示匹配到z串的第几个, 然后用滚动数组

----------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define x(i) x[i - 1]
#define y(i) y[i - 1]
#define z(i) z[i - 1]
const int maxn = 509;
char x[maxn], y[maxn], z[maxn];
int dp[2][maxn][maxn], xn, yn, zn;
int main() {
scanf("%s%s%s", x, y, z);
xn = strlen(x); yn = strlen(y); zn = strlen(z);
memset(dp, 0, sizeof dp);
int c = 0, p = 1;
for(int i = 1; i <= xn; i++) {
swap(c, p);
memset(dp[c], 0, sizeof dp[c]);
for(int j = 1; j <= yn; j++)
for(int k = 0; k <= zn; k++) {
dp[c][j][k] = max(max(dp[p][j][k], dp[c][j - 1][k]), dp[c][j][k]);
if(x(i) == y(j) && (k == 0 || dp[p][j - 1][k])) {
if(x(i) == z[k])
dp[c][j][k + 1] = max(dp[c][j][k + 1], dp[p][j - 1][k] + 1);
else
dp[c][j][k] = max(dp[c][j][k], dp[p][j - 1][k] + 1);
}
}
}
if(dp[c][yn][zn])
printf("%d\n", dp[c][yn][zn]);
else
puts("NO SOLUTION");
return 0;
}

----------------------------------------------------------------------------

3304: [Shoi2005]带限制的最长公共子序列

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 307  Solved: 137
[Submit][Status][Discuss]

Description

Input

输入共三行,每行为长度不超过500的,小写字母组成的非空字符串
按顺序分别表示x,y,z

Output

如存在满足条件的N,输出W的长度,否则输出 NO SOLUTION

Sample Input


helloworld
hellxebore
xr

Sample Output


5

HINT

w=hxeor

本题要求找出的W首先是X与Y的公共子序列并且包含Z,然后才是满足这些条件的

字符串里面找最长的。

Source

转载于:https://www.cnblogs.com/JSZX11556/p/4904435.html

BZOJ 3304: [Shoi2005]带限制的最长公共子序列( LCS )相关推荐

  1. 最长公共子序列 (LCS) 详解+例题模板(全)

    欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/-萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗- ------------ ...

  2. 动态规划算法解最长公共子序列LCS问题

    动态规划算法解LCS问题 作者 July 二零一零年十二月三十一日 本文参考:微软面试100题系列V0.1版第19.56题.算法导论.维基百科. 第一部分.什么是动态规划算法 ok,咱们先来了解下什么 ...

  3. 动态规划之最长公共子序列(LCS)

    最长公共子序列(LCS,Longest Common Subsequence).其定义是,一个序列 S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则 S 称为已知序列的最 ...

  4. 程序员编程艺术第十一章:最长公共子序列(LCS)问题

    程序员编程艺术第十一章:最长公共子序列(LCS)问题 0.前言 程序员编程艺术系列重新开始创作了(前十章,请参考程序员编程艺术第一~十章集锦与总结).回顾之前的前十章,有些代码是值得商榷的,因当时的代 ...

  5. 算法之最长公共子序列(LCS)问题

    算法课上老师留的作业,最长公共子序列LCS(Longest Common Subsequence)问题,首先看到这个问题感觉有点复杂,和最长公共子串不同,公共子序列并不要求元素相邻,看起来只有穷举才能 ...

  6. 最长公共子序列php,动态规划(最长公共子序列LCS)

    概念 求解决策过程最优化的结果 (可能有多个) 把多阶段过程转化为一系列单阶段过程,利用各阶段之间的关系,逐个求解 计算过程中会把结果都记录下,最终结果在记录中找到. 举例 求两个字符串的最长公共子序 ...

  7. python实现求解最长公共子序列LCS问题

    在实现论文<Automatically Generating Models for Botnet Detection>论文的算法中,用到了一个The longest commom subs ...

  8. 算法导论-----最长公共子序列LCS(动态规划)

    目录 一.概念梳理 二.最长公共子序列解决方案 方案1:蛮力搜索策略 方案2:动态规划策略 三.C代码实现 实现1 实现2(空间优化) 一.概念梳理   1. 子序列(subsequence): 一个 ...

  9. 动态规划表格法解决最长公共子序列(LCS)问题

    3.5 最长公共子序列(LCS) 前言:图片是博主自己画的,转载请注明出处哦 3.5.1 问题描述 最长公共子序列(Longest Common Subseuence,LCS)问题:给定两个字符串,求 ...

最新文章

  1. (Interrupt Latency) 中断延迟
  2. CVPR2020 Oral | 华为开源只有加法的神经网络,实习生领衔,效果不输传统CNN
  3. python是不是特别垃圾-谈谈python垃圾回收机制
  4. 【ARM】Tiny4412裸板编程之MMU(页 4K)
  5. lambda 和 std::function
  6. Android拍照流程
  7. 十大应用在数学的计算机语言
  8. SpringBoot Serverless 实战 | 监控调试
  9. 计算机专业学生学校活动,校园IT文化节活动策划方案
  10. 新建销售群开场语句_销售会议开场白台词
  11. 讯飞语义相似度baseline
  12. Selenium page_load_strategy设置页面加载策略
  13. python 练习洗牌
  14. 农夫住房抵押贷款叫醒农村沉睡资本
  15. Linux涂鸦智能网关面板Turnkey方案
  16. 华为ENSP之MPLS V HubSpoke架构
  17. SAP 采购订单PO基于采购金额的审批策略配置
  18. Prezi 桌面版安装后不能正常登陆的解决办法
  19. kmp1-HDU1711 HDU1686 HDU2087 HDU3746
  20. 微信小程序 | 小程序系统API调用

热门文章

  1. 关于c3样式在浏览器上的兼容问题
  2. JS实现让页脚一直固定在页面底部
  3. 云服务器是什么,有什么用?
  4. 向内存申请一个二维数组空间,并以**P返回的函数
  5. java 查询solr_java实现简单的solr查询
  6. php软件开发--oop(面向对象)
  7. 西门子1200如何与c语言通信,S7-1200PLC1214c dc/dc/dc通过profinet以太网和S7-200smartcpu通讯怎么设置?...
  8. macbook历代_苹果MacBook Pro为什么越来越贵?历代回顾与新MBP简评
  9. Java 并发(JUC 包-03)
  10. 无根二叉树_无根Podman如何工作?