首页 > 其他分享 >蓝桥杯—蓝肽子序列—动态规划

蓝桥杯—蓝肽子序列—动态规划

时间:2024-03-24 11:32:36浏览次数:24  
标签:蓝肽 s2 s1 蓝桥 序列 input dp

蓝肽子序列

dp[i] [j]表示L1,L2 前 i ,j 个字段有多少个公共子序列,对于一个Xi 和 Yj(L1,L2的前i, j 个字段形成序列.

如果xi=yj (第i,j字段),则dp[i] [j]=dp[i-1] [j-1]+1(前面的公共字段加一).

否则,dp[i] [j]=max(dp[i-1] [j] , dp[i] [j-1]) ,考虑前后情况的最大值。

最后输出dp[n] [m]。

'''
本题的思路就是先将蓝肽质完全分割为一个个蓝肽子序列,
然后再用动态规划算法求最大公共子序列
'''
s1 = input()
s2 = input()
list_s1 = []  # 用于储存分割好的蓝肽子序列
list_s2 = []
a = ''  # 用于分割单词 ---> 蓝肽子序列
b = ''  # 作用同上
for i in s1:
    if 'A' <= i <= 'Z':  # 判断i是否是大写字母大小写字母ASCII值不在同一个区间
        if a != '':  # 说明又碰到了另一个大写字母,即其它蓝肽的头部
            list_s1.append(a)
            a = ''  # 开始搜集下一个蓝肽子序列
    a += i  # 重建a
list_s1.append(a)  # 将最后一个蓝肽子序列加入
# 以下为搜集s2中蓝肽子序列的过程,与上面的步骤大致相同
for i in s2:
    if 'A' <= i <= 'Z':
        if b != '':
            list_s2.append(b)
            b = ''
    b += i
list_s2.append(b)
n = len(list_s1)
m = len(list_s2)
dp = [[0] * (m + 1) for _ in range(n + 1)]
# 经典动态规划
for i in range(1, n + 1):
    for j in range(1, m + 1):
        if list_s1[i - 1] == list_s2[j - 1]:
            dp[i][j] = dp[i - 1][j - 1] + 1
        else:
            dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
print(dp[n][m])

标签:蓝肽,s2,s1,蓝桥,序列,input,dp
From: https://blog.csdn.net/2201_75325396/article/details/136984467

相关文章

  • [暴力题解系列] 2023年蓝桥杯-冶炼金属
    世界上存在很难的题,但不存在暴力偷不到分的题​ 这题的暴力思路比你想的更简单,我直接枚举v的数值不就行了?#include<iostream>#include<algorithm>usingnamespacestd;inta[10010],b[10010];intmain(){intn;scanf("%d",&n);for(inti=1;i<=n;i++)......
  • P9746 「KDOI-06-S」合并序列
    P9746「KDOI-06-S」合并序列经典区间dp+预处理不难设计状态\(f_{l,r}\)表示\([l,r]\)能否变为一个数,转移也简单,枚举三个区间,满足\(f_{i,a}=f_{b,c}=f_{d,r}=1\)且异或和为\(0\)。复杂度为\(O(n^6)\)。设异或和为\(s_{l,r}\)。考虑优化,瓶颈在于转移需要枚举三个区间......
  • 【蓝桥杯·dp问题】砝码称重
    此题易联想到使用动态规划解决,dp[i][j]状态表示是否存在前i个砝码中选取重量为j的方案。砝码重量分三种情况:1.砝码本身的重量(即一个砝码就可以表示的重量)2.放在同侧3.放在异侧注意重量为0的情况不记作方案数。#include<cstdio>#include<cstring>#include<iostream......
  • [暴力题解系列]2023年蓝桥杯-子串简写
    ​ 大伙都说暴力是最低级的算法,啊那确实。但是好的暴力才是真正牛逼的骗分。咱就是说,暴力如何骗分呢?就是基于最暴力的算法一步步优化到能得更多分的暴力。子串简写这题,首先第一步就能想到一件事情:暴力枚举子串开头和末尾的位置,检查是否是符合题目要求的字符,如果是,并且长度大于......
  • EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融
    EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)目录EI级!高创新原创未发表!VMD-TCN-BiGRU-MATT变分模态分解卷积神经网络双向门控循环单元融合多头注意力机制多变量时间序列预测(Matlab)预测......
  • 关于简单序列分组的基本思路
    描述:题目是很简单的题目,大家应该都能秒了,只是也许大家都没有认真琢磨过这个简单的算法是怎么通过逻辑推理出来的,我看了网上很多大佬的解释都是直接给结论,这并不利于我们逻辑思维的成长,记忆并不是懂得。不才力求谁看谁明白。问题:现有一副扑克牌,需要按顺序轮流发给三个玩家,编......
  • 【蓝桥杯】(3.19矩形总面积)
    #include<iostream>#defineLLlonglongusingnamespacestd;intmain(){LLx1,y1,x2,y2,x3,y3,x4,y4;cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;LLs1,s2,s;s1=(x2-x1)*(y2-y1);s2=(x4-......
  • 第十三届蓝桥杯省赛真题 Java C 组【原卷】
    文章目录发现宝藏【考生须知】试题A:排列字母试题B:特殊时间试题C:纸张尺寸试题D:求和试题E:\mathbf{E}:......
  • 【LeetCode 1220】统计元音字母序列的数目
    题目描述原题链接:LeetCode.1220统计元音字母序列的数目解题思路定义DP数组dp[i][j]含义为长度为i+1且以j字符结尾的字符串有多少个,j从0到4依次代表('a','e','i','o','u')这5个元音字符,dp[0][0~4]长度为1时的初始个数都为1;dp[i][j]对应字符串末尾字符已经由j确定,对应......
  • P8756 [蓝桥杯 2021 省 AB2] 国际象棋 题解
    设计状态什么的就不讲了,这里是对其它题解的优化。怎么优化呢,我们可以知道的是我们只要明确了当前行的状态,上一行的可选集就是知道的,如果我们明确了当前行以及上一行的状态,那么上上行的可选集就是知道的,于是我们就可以使用二进制子集枚举来写,这样就减去了全部不合法的枝叶,我们可以......