【题目】:问题 B:  Human Gene Functions

【来源】:点击打开链接

【解法】:这个题是最长公共子序列的变形题。

1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和j对应下最大的权值

2.状态方程:写状态方程根据状态转移的情况不同,可分为从当前状态推下一个状态,还有一种是从后面个状态推前面的状态,具体分情况而定(这个地方还不是理解的很透,具体的刘汝佳的黑书上有,以后看了再补充进来)

这题是由后面的一个状态反推出前一个所有可能状态,转移方程:DP[i][j]=max{ DP[s1[i-1]][s2[j]]+ match[s1[i]][‘-’],

DP[s1[i]][s2[j-1]]+ match[‘-’][s2[j]],

DP[s1[i-1]][s2[j-1]]+match[s1[i]][s2[j]] }

3. 初值:  dp[0][0]=0

dp[0][i]=dp[0][i-1]+m['-'][s2[i]]

dp[i][0]=dp[i-1][0]+m[s1[i]]['-']

【代码】:

#include <cstdio>
#include <cstring>int m[150][150];
int dp[150][150];int Max(int a,int b,int c)
{if(a>=b && a>=c) return a;else if(b>=a && b>=c) return b;else return c;
}int main(){m['A']['A']=5;m['A']['C']=-1;m['A']['G']=-2;m['A']['T']=-1;m['A']['-']=-3;m['C']['A']=-1;m['C']['C']=5;m['C']['G']=-3;m['C']['T']=-2;m['C']['-']=-4;m['G']['A']=-2;m['G']['C']=-3;m['G']['G']=5;m['G']['T']=-2;m['G']['-']=-2;m['T']['A']=-1;m['T']['C']=-2;m['T']['G']=-2;m['T']['T']=5;m['T']['-']=-1;m['-']['A']=-3;m['-']['C']=-4;m['-']['G']=-2;m['-']['T']=-1;m['-']['-']=0;int i,j,N;scanf("%d",&N);while(N--){char s1[101]={0},s2[101]={0};int n1,n2;scanf("%d %s",&n1,s1+1);scanf("%d %s",&n2,s2+1);dp[0][0]=0;for(i=1;i<=n2;i++)dp[0][i]=dp[0][i-1]+m['-'][s2[i]];for(i=1;i<=n1;i++)dp[i][0]=dp[i-1][0]+m[s1[i]]['-'];for(i=1;i<=n1;i++)for(j=1;j<=n2;j++)dp[i][j]=Max(dp[i-1][j-1]+m[s1[i]][s2[j]],dp[i-1][j]+m[s1[i]]['-'],dp[i][j-1]+m['-'][s2[j]]);printf("%d\n",dp[n1][n2]);}return 0;
}

转载于:https://www.cnblogs.com/litaotao/p/3592480.html

Human Gene Functions(最长公共子序列变形题)相关推荐

  1. poj 1080 Human Gene Functions (最长公共子序列变形)

    题意:有两个代表基因序列的字符串s1和s2,在两个基因序列中通过添加"-"来使得两个序列等长:其中每对基因匹配时会形成题中图片所示匹配值,求所能得到的总的最大匹配值. 题解:这题运 ...

  2. 动态规划求解LCS最长公共子序列问题c++

    文章目录 求最长公共子序列 最长公共子序列问题 刻画最长公共子序列的特征 递归公式 C++代码 求最长公共子序列长度 打印任意一组最长公共子序列 模板题 求最长公共子序列 最长公共子序列问题 (Lon ...

  3. DP专辑之最长公共子序列及其变形

    vijos1111(裸的最长公共子序列) 链接:www.vijos.org/p/1111 题解:好久没有写最长公共子序列了,这题就当是复习了.求出最长公共子序列,然后用两个单词的总长度减去最长公共子序 ...

  4. python【数据结构与算法】动态规划详解从背包到最长公共子序列(看不懂你来打我)

    文章目录 1 引入 2 01背包 3 完全背包问题 4 多重背包问题 5 最长公共子序列 1 引入 0-1背包问题是最广为人知的动态规划问题之一,拥有很多变形.尽管在理解之后并不难写出程序,但初学者往 ...

  5. 最长公共子序列(LCS)问题 Longest Common Subsequence 与最长公告字串 longest common substr...

    问题描述:字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X="x0,x1,-,xm-1",序列Y=& ...

  6. 【动态规划】最长公共子序列与最长公共子串

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  7. POJ 3080 多个串最长公共子序列

    求多个串最长公共子序列,字典序最小输出.枚举剪枝+kmp.比较简单,我用find直接查找16ms #include<iostream> #include<string> #in ...

  8. java实现最长连续子序列_最长公共子序列 ||

    问题:在 前一篇文章 最长公共子序列 | 的基础上要求将所有的最长公共子序列打印出来,因为最长公共子序列可能不只一种. 难点:输出一个最长公共子序列并不难,难点在于输出所有的最长公共子序列,我们需要在 ...

  9. 动态规划—最长公共子序列问题 HDU-1159 Common Subsequence

    动态规划-最长公共子序列问题 Common Subsequence [ HDU - 1159 ] A subsequence of a given sequence is the given sequ ...

最新文章

  1. lvs服务器需要开启web服务么_Nginx+Keepalived实现web服务器高可用
  2. 并发用户数和TPS的关系
  3. Python 继承标准类时发生了什么
  4. Springboot 集成Springcloud gateway的入门
  5. mysql数据库21_MySQL数据库技术(21)[组图]_MySQL
  6. 如何扩展分布式日志组件(Exceptionless)的日志通知?
  7. 大数据技术原理与应用-概述
  8. javascript中几个有意思的功能(目前5项) 1右键无效 2禁止网页复制 3禁止F5刷新 4新发现 5屏蔽js错误
  9. Kaldi语音识别库linux环境下的安装和编译
  10. puppet详解(四)——package资源详解
  11. 优先队列重载(理解)
  12. 将 Java Spring Framework 应用程序迁移到 Windows Azure
  13. Excel 空值填充
  14. 安卓模拟器安装教程_[教程]安卓手机如何安装百度输入法五笔字根皮肤[教程]...
  15. 【PHP】最详细PHP从入门到精通(一)
  16. BeEF-XSS实验手记
  17. IFrame里面的子页面html内容变化时,怎么动态改变IFrame的高度
  18. mysql oob_随机森林之oob error 估计
  19. CATIA V5 R24 2014安装教程
  20. Discuz!教程之门户列表页文章中无图片时,从图库中选择一张作为封面

热门文章

  1. python脚本——selenium自动化执行一些网页上的操作
  2. uniapp微信小程序VR看车内饰(Skybox,Cubemap)
  3. AWR的Snapshots讲解
  4. 社交网络算法-分析指标
  5. 干货分享:软文发布前的4个小技巧!
  6. iphone手机照片heic转换jpg
  7. blender php,=== 斑斓中国 Blender 知识索引 ===【初步整理】 nirenyang
  8. eclipse手动pom本地包_eclipse手动添加本地jar包到本地maven仓库
  9. 做一个电影院选座功能-前端
  10. Adobe XD导出图片合并工具