【HDU - 1080】Human Gene Functions(dp,可编辑距离类问题)
题干:
给你两个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,可编辑距离类问题)相关推荐
- POJ 1080 Human Gene Functions(DP:LCS)
题意: 人类基因有两条,现在给出两个字符串,有长有短,可以在字符串中插入空格,要求对照表使两个字符串得出的相似值最大. 要点: 是LCS的变形,用dp[i][j]存储第一个字符串前i个字符与第二个字符 ...
- HDU 1080 Human Gene Functions
DP,比较容易想到是2维DP,表示到第一个字符串的i和第二个字符串的j最大值是多少, 字符串下标的0在这里对应的i,j是1 #include<algorithm> #include< ...
- POJ - 1080 Human Gene Functions解题报告(求最长相同子序列)
题目大意: 太长的英语,我就直接读了测试样例和题目中一些可以看的....好像是关于什么人类基因工程什么的, 腺嘌呤脱氧核糖核苷酸~ 每组测试实例给你两串由AGCT四个字母组成的字符串(每个字符串100 ...
- poj 1080 Human Gene Functions (最长公共子序列变形)
题意:有两个代表基因序列的字符串s1和s2,在两个基因序列中通过添加"-"来使得两个序列等长:其中每对基因匹配时会形成题中图片所示匹配值,求所能得到的总的最大匹配值. 题解:这题运 ...
- Human Gene Functions(最长公共子序列变形题)
[题目]:问题 B: Human Gene Functions [来源]:点击打开链接 [解法]:这个题是最长公共子序列的变形题. 1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和 ...
- 刷题总结——Human Gene Functions(hdu1080)
题目: Problem Description It is well known that a human gene can be considered as a sequence, consisti ...
- 动态规划(DP),Human Gene Functions
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1027 http://poj.org/problem?id=108 ...
- POJ1080 Human Gene Functions 动态规划 LCS的变形
题意读了半年,唉,给你两串字符,然后长度不同,你能够用'-'把它们补成同样长度,补在哪里取决于得分,它会给你一个得分表,问你最大得分 跟LCS非常像的DP数组 dp[i][j]表示第一个字符串取第i个 ...
- POJ1080 Human Gene Functions(LCS)
题目链接. 分析: 和 LCS 差不多. #include <iostream> #include <cstdio> #include <cstdlib> #inc ...
最新文章
- 万亿级企业MySQL海量存储分库分表设计实践
- toad dba suite for oracle 12.1,Toad for Oracle 12.1下载地址
- 中国健康体检行业行情动态及未来发展趋向分析报告2022年版
- UML统一建模语言知识体系概述
- win7 php mysql扩展名_Win7 配置Apache+PHP+Mysql环境
- c语言实现bf算法的定位函数,数据结构c语言版严蔚敏清华大学出版社第四章串.ppt...
- oracle安装 衍生进程已退出,linux安装oracle 出现问题
- 纯CSS实现非常好看的图片轮播演示
- sql server 内存_SQL Server内存性能指标–第1部分–内存页/秒和内存页故障/秒
- 看咒语,知情节?他们用《哈利·波特》让AI学习剧透
- ruby设计模式之观察者模式2————更加一般化的观察者模式
- Java编程:排序算法——插入排序
- 深入理解加密、解密、数字签名和数字证书
- 《软件体系结构》 练习题
- WindowsXP_KB909667_x86_ENU
- 打砖块c语言算法,C语言打砖块游戏的原理!哪位高手指点一下,程序有!
- python编程求100以内能被5整除之和_C语言,求100以内能被3整除或能被5整除的数的和...
- 什么是stub文件_stub code
- VFW连接视频驱动不成功问题解决
- 巴别塔合约作战终端开发日记2——Linux系统部署项目
热门文章
- SQL Server 清空或删除所有数据库表中的数据
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第6篇]我们怎么把NP问题解释成一组可以在多项式内证明的命题
- 宾馆管理系统mysql_宾馆管理系统(含源码和数据库文件)
- mysql降级_mysql8降级到mysql5的方法介绍
- 装B指南之使用浏览器播放电影
- 真实AIS数据,解码,可视化
- 陈伯雄lisp_基于AutoLisp的AutoCAD二次开发自动生成系统图
- nlp 命名实体识别 算法_中文命名实体识别算法 Lattice LSTM
- php 简析对象,PHP白盒审计工具RIPS源码简析
- SDL以及扩展库的交叉编译过程简介