没 事 找 事

「我的做题历程」:

step1:观察题面。

  「蝙蝠侠需要找到一个最长的字符串,使得这个字符串作为一个子序列被包含在所有的三个字符串中」,可以得出这是一道最长公共子序列,而且有三个字符串。(题型:线性 dp —— 最长公共子序列)
  「蝙蝠侠现在需要找到的是最大的长度,而不是序列」,说明只是一道普通的 LCS。

step2:思考解法。

  第一步思考 dp 状态:

d p i , j , k dp_{i,j,k} dpi,j,k​:第一串前 i i i 项,第二串前 j j j 项,第三串前 k k k 项中的最长公共子序列长度。

  对于当前的 a i , b j , c k a_{i}, b_{j}, c_{k} ai​,bj​,ck​ 而言,只有能做贡献或无法做贡献两种状态。
  若 a i = b j = c k a_{i}= b_{j}= c_{k} ai​=bj​=ck​,则它们能做贡献,此时的最长公共子序列的长度为第一串前 i − 1 i - 1 i−1 项,第二串前 j − 1 j - 1 j−1 项,第三串前 k − 1 k - 1 k−1 项中的最长公共子序列的长度加 1 1 1。
  否则它们无法做贡献,此时放弃做贡献最小的那一项。

  第二步思考状态转移方程:
  本题比常规的 LCS 要多一个字符串,因此只需要再多一维就好。
d p i , j , k = d p i − 1 , j − 1 , k − 1 + 1 ( a i = b j = c k ) dp_{i, j, k} = dp_{i - 1, j - 1 ,k - 1} + 1\ (a_{i} = b_{j} = c_{k}) dpi,j,k​=dpi−1,j−1,k−1​+1 (ai​=bj​=ck​)
d p i , j , k = max ⁡ { d p i − 1 , j , k , d p i , j − 1 , k , d p i , j , k − 1 } ( a i ≠ b j or  b j ≠ c k or  a i ≠ c k ) dp_{i, j, k} = \max\{dp_{i - 1, j ,k},dp_{i, j - 1 ,k},dp_{i, j ,k - 1}\} \ (a_{i} \ne b_{j} \text{ or } b_{j} \ne c_{k} \text{ or }a_{i} \ne c_{k}) dpi,j,k​=max{dpi−1,j,k​,dpi,j−1,k​,dpi,j,k−1​} (ai​=bj​ or bj​=ck​ or ai​=ck​)

step3:完成代码:

  因为有三个字符串,所以需要比平常的 LCS 多一层循环。

代码(抵制学术不端行为,拒绝 Ctrl + C):

#include <bits/stdc++.h>
using namespace std;
const int N = 5e1 + 5;
char a[N], b[N], c[N];
int la, lb, lc, dp[N][N][N];
/*
dp(i, j, k): 前 i, j, k 项中的最长公共子序列
if a(i) = b(j) = c(k)dp(i, j, k) = dp(i - 1, j - 1, k - 1) + 1;
else dp(i, j, k) = max{dp(i - 1, j, k), dp(i, j - 1, k), dp(i, j, k - 1)};
*/
int main() {freopen("trouble.in", "r", stdin);freopen("trouble.out", "w", stdout);scanf("%s\n%s\n%s", a + 1, b + 1, c + 1);la = strlen(a + 1), lb = strlen(b + 1), lc = strlen(c + 1);for (int i = 1; i <= la; i++) {for (int j = 1; j <= lb; j++) {for (int k = 1; k <= lc; k++) {if (a[i] == b[j] && b[j] == c[k]) {dp[i][j][k] = dp[i - 1][j - 1][k - 1] + 1;} else {dp[i][j][k] = max(dp[i - 1][j][k], max(dp[i][j - 1][k], dp[i][j][k - 1]));}}}}printf("%d", dp[la][lb][lc]);return 0;
}

Trouble is a friend, but Accepted is better than it!


让我们来解决 『蝙蝠侠的麻烦』 叭~

Bye bye!!1

「题解」蝙蝠侠的麻烦相关推荐

  1. 「题解」:[组合数学]:Perm 排列计数

    题干: Description称一个1,2,-,N的排列P1,P2-,Pn是Magic的,当且仅当2<=i<=N时,Pi>Pi/2. 计算1,2,-N的排列中有多少是Magic的,答 ...

  2. 「题解」:[BZOJ4558]方

    问题: 方 时间限制: 2 Sec  内存限制: 256 MB 题面 题目描述 上帝说,不要圆,要方,于是便有了这道题.由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形 上帝把我们派到了一 ...

  3. 「题解」300iq Contest 2 B Bitwise Xor

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:gym102331B. 题意概述 给你一个长度为 nnn 的序列 aia_iai​,求一个最长的子序列满足所有子序列中的元 ...

  4. 「题解」:[线段树]:永无乡

    题面 题目描述 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 ...

  5. 「题解」USACO15FEB Fencing the Herd G

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 P3122.USACO 官网. 题意概述 给你平面上的一些点和直线,有两种操作: 新加入一个点 (x,y)(x,y) ...

  6. 「题解」300iq Contest 2 H. Honorable Mention

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:gym102331H. 题意概述 给定一个长度为 n n n 的序列 a a a,有 q q q 次询问,每次询问给定三个 ...

  7. 「题解」老鼠与猫的交易

    题目描述 有一只老鼠很喜欢奶酪,但是奶酪被分别放在N个房间里,而且这些房间都有一只猫咪看守,现在它准和猫咪们 做个交易.它有M磅的猫食,想用这M磅猫食换取奶酪.在猫咪看守的每一个房间里有奶酪J[i]磅 ...

  8. 「题解」清华集训 2016 你的生命已如风中残烛

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 P6672.UOJ 273. 题意简述 给你牌数为 m + 1 m+1 m+1 的牌堆,其中第 m + 1 m+1 ...

  9. 「题解」CF1468M Similar Sets

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书. 题目 题目链接:洛谷.CF1468M. 题意简述 给定 n n n 个集合 S 1 ∼ n S_{1\sim n} S1∼n​,问是否存在 ...

最新文章

  1. Const 重载解析
  2. android studio 怎么做屏幕适配?
  3. Android媒体播放框架MediaSessionCompat介绍实践
  4. Nature认定:中国高校论学术,中科大无悬念第一
  5. SecutrCRTt 连接VirtualBox 中的Ubuntu -端口转发
  6. 深度学习(神经网络) —— BP神经网络原理推导及python实现
  7. 数博会重磅活动:第二届大数据科学与工程国际会议议程
  8. 全国计算机等级英语一级考试,全国计算机等级考试职业英语一级考试大纲
  9. 神经网络之感知器算法简单介绍和MATLAB简单实现
  10. [转]Groovy和Grails简介
  11. Sql Server 的sa用户被禁用
  12. 自定义控件之圆形的image
  13. cadence ic5141安装包_linux下安装cadence ic5141
  14. 算法:线性时间选择(C/C++)
  15. pr 无法启动因为计算机丢失,pramtlib.dll_“PR打不开,因为计算机丢失TimeWarpFilter.dll”是怎么回事?怎么办啊?_prccamtlib.dll...
  16. 【柒穆雨】平面设计好不好学?设计小白该如何学习平面设计
  17. 阿里云服务器的登录方法
  18. Ubuntu 20安装微信3.0版本的方法 v2022
  19. 打印机服务器文件,打印机服务器ftp配置文件
  20. 2022年化工自动化控制仪表考试试题模拟考试平台操作

热门文章

  1. Parallel execution 并行查询的性能测试
  2. 趣图:普通人的煎蛋 vs 程序员的煎蛋
  3. 数据分析系列 之python中遍历列表的几种方法
  4. 头条丨京品高科携手腾讯微瓴蜂网,共建智慧零售新体系
  5. Linux 配置MySQL
  6. 讯琥科技 | 云计算 VS 边缘计算,是朋友还是敌人?
  7. 数组为空数组,判断数组长度不等于0
  8. CentOS 7 U盘安装
  9. 【React-Native】快速升级RN版本指北针
  10. 名帖64 欧阳询 楷书《皇甫诞碑》