题干:

给你两个DNA序列(长度不一定相同),你可以在其中任意位置上加入空格,使得最终他俩长度相同,最终相同长度的两个DNA序列会有个相似度比较(每个字符相对应的比较),问你如何放置这些空格使得总相似度最大。

题目告诉你了空格和空格比较的权值是0,这样就保证了答案的有穷性。不然如果是正数的话就可以无穷大了(本也不符合常识)

解题报告:

类似编辑距离xjb搞就行了。dp[i][j]代表第一个序列前i个和第二个序列前j个完全匹配的最优解。

AC代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<string>
#include<cmath>
#include<cstring>
#define F first
#define S second
#define ll long long
#define pb push_back
#define pm make_pair
using namespace std;
typedef pair<int,int> PII;
const int MAX = 400 + 5;
const int INF = 0x3f3f3f3f;
int sc[MAX][MAX];
int dp[MAX][MAX];
char s1[MAX],s2[MAX];
int Max(int a,int b,int c) {return max(a,max(b,c));
}
int main()
{sc['A']['A']=5;sc['C']['C']=5;sc['G']['G']=5;sc['T']['T']=5;sc['A']['C']=sc['C']['A']=-1;sc['A']['G']=sc['G']['A']=-2;sc['A']['T']=sc['T']['A']=-1;sc['C']['G']=sc['G']['C']=-3;sc['A'][' ']=sc[' ']['A']=-3;sc['C']['T']=sc['T']['C']=-2;sc['C'][' ']=sc[' ']['C']=-4;sc['G']['T']=sc['T']['G']=-2;sc['G'][' ']=sc[' ']['G']=-2;sc['T'][' ']=sc[' ']['T']=-1;int t;cin>>t;while(t--) {int len1,len2;scanf("%d%s%d%s",&len1,s1+1,&len2,s2+1);for(int i = 0; i<=len1; i++) for(int j = 0; j<=len2; j++) dp[i][j] = -INF; dp[0][0]=0;for(int i = 1; i<=len1; i++) dp[i][0] = dp[i-1][0] + sc[s1[i]][' '];for(int i = 1; i<=len2; i++) dp[0][i] = dp[0][i-1] + sc[s2[i]][' ']; for(int i = 1; i<=len1; i++) {for(int j = 1; j<=len2; j++) {dp[i][j] = Max(dp[i-1][j-1]+sc[s1[i]][s2[j]],dp[i-1][j]+sc[s1[i]][' '],dp[i][j-1]+sc[s2[j]][' ']);}} printf("%d\n",dp[len1][len2]);}return 0 ;
}

【HDU - 1080】Human Gene Functions(dp,可编辑距离类问题)相关推荐

  1. POJ 1080 Human Gene Functions(DP:LCS)

    题意: 人类基因有两条,现在给出两个字符串,有长有短,可以在字符串中插入空格,要求对照表使两个字符串得出的相似值最大. 要点: 是LCS的变形,用dp[i][j]存储第一个字符串前i个字符与第二个字符 ...

  2. HDU 1080 Human Gene Functions

    DP,比较容易想到是2维DP,表示到第一个字符串的i和第二个字符串的j最大值是多少, 字符串下标的0在这里对应的i,j是1 #include<algorithm> #include< ...

  3. POJ - 1080 Human Gene Functions解题报告(求最长相同子序列)

    题目大意: 太长的英语,我就直接读了测试样例和题目中一些可以看的....好像是关于什么人类基因工程什么的, 腺嘌呤脱氧核糖核苷酸~ 每组测试实例给你两串由AGCT四个字母组成的字符串(每个字符串100 ...

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

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

  5. Human Gene Functions(最长公共子序列变形题)

    [题目]:问题 B:  Human Gene Functions [来源]:点击打开链接 [解法]:这个题是最长公共子序列的变形题. 1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和 ...

  6. 刷题总结——Human Gene Functions(hdu1080)

    题目: Problem Description It is well known that a human gene can be considered as a sequence, consisti ...

  7. 动态规划(DP),Human Gene Functions

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1027 http://poj.org/problem?id=108 ...

  8. POJ1080 Human Gene Functions 动态规划 LCS的变形

    题意读了半年,唉,给你两串字符,然后长度不同,你能够用'-'把它们补成同样长度,补在哪里取决于得分,它会给你一个得分表,问你最大得分 跟LCS非常像的DP数组 dp[i][j]表示第一个字符串取第i个 ...

  9. POJ1080 Human Gene Functions(LCS)

    题目链接. 分析: 和 LCS 差不多. #include <iostream> #include <cstdio> #include <cstdlib> #inc ...

最新文章

  1. 万亿级企业MySQL海量存储分库分表设计实践
  2. toad dba suite for oracle 12.1,Toad for Oracle 12.1下载地址
  3. 中国健康体检行业行情动态及未来发展趋向分析报告2022年版
  4. UML统一建模语言知识体系概述
  5. win7 php mysql扩展名_Win7 配置Apache+PHP+Mysql环境
  6. c语言实现bf算法的定位函数,数据结构c语言版严蔚敏清华大学出版社第四章串.ppt...
  7. oracle安装 衍生进程已退出,linux安装oracle 出现问题
  8. 纯CSS实现非常好看的图片轮播演示
  9. sql server 内存_SQL Server内存性能指标–第1部分–内存页/秒和内存页故障/秒
  10. 看咒语,知情节?他们用《哈利·波特》让AI学习剧透
  11. ruby设计模式之观察者模式2————更加一般化的观察者模式
  12. Java编程:排序算法——插入排序
  13. 深入理解加密、解密、数字签名和数字证书
  14. 《软件体系结构》 练习题
  15. WindowsXP_KB909667_x86_ENU
  16. 打砖块c语言算法,C语言打砖块游戏的原理!哪位高手指点一下,程序有!
  17. python编程求100以内能被5整除之和_C语言,求100以内能被3整除或能被5整除的数的和...
  18. 什么是stub文件_stub code
  19. VFW连接视频驱动不成功问题解决
  20. 巴别塔合约作战终端开发日记2——Linux系统部署项目

热门文章

  1. SQL Server 清空或删除所有数据库表中的数据
  2. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第6篇]我们怎么把NP问题解释成一组可以在多项式内证明的命题
  3. 宾馆管理系统mysql_宾馆管理系统(含源码和数据库文件)
  4. mysql降级_mysql8降级到mysql5的方法介绍
  5. 装B指南之使用浏览器播放电影
  6. 真实AIS数据,解码,可视化
  7. 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图
  8. nlp 命名实体识别 算法_中文命名实体识别算法 Lattice LSTM
  9. php 简析对象,PHP白盒审计工具RIPS源码简析
  10. SDL以及扩展库的交叉编译过程简介