HDU 1080 Human Gene Functions - 最长公共子序列(变形)
题目大意:
将两个字符串对齐(只包含ACGT,可以用'-'占位),按照对齐分数表(参见题目)来计算最后的分数之和,输出最大的和。
例如:AGTGATG 和 GTTAG ,对齐后就是(为了表达对齐,这里我用m表示'-')
AGTGATG
mGTTAmG
题目分析:
首先看出这道题与LCS有关,下面来考虑转移:
当t1[i]==t2[j]时,和LCS一样,\(dp[i][j] = dp[i-1][j-1]+score[t1[i]][t2[j]]\)
当t1[i]!=t2[j]时,唯一不同的是这里会有3中选择:
- 让1i-1和1j-1对齐,加上ij对齐的分数。
- 让1i-1和1j对齐,加上i和'-'对齐的分数。
- 让1i和1j-1对齐,加上j和'-'对齐的分数。
取这三者的较大值。
最后总结方程如下:
\]
\]
code
#include <bits/stdc++.h>
using namespace std;
const int N = 150, OO = 0x3f3f3f3f;
const int score[10][10] = {{0},
{0, 5, -1, -2, -1, -3},
{0, -1, 5, -3, -2, -4},
{0, -2, -3, 5, -2, -2},
{0, -1, -2, -2, 5, -1},
{0, -3, -4, -2, -1, 0}
};
int T, len1, len2;
string s1, s2;
int t1[N], t2[N], dp[N][N];
inline int getVal(char c){
switch(c) {
case 'A' : return 1; break;
case 'C' : return 2; break;
case 'G' : return 3; break;
case 'T' : return 4; break;
defualt: assert(false);
}
}
inline void init(){
memset(dp, 0, sizeof dp);
for(int i=1; i<=len1; i++) dp[i][0] = dp[i-1][0] + score[t1[i]][5];
for(int i=1; i<=len2; i++) dp[0][i] = dp[0][i-1] + score[t2[i]][5];
}
int main(){
freopen("h.in", "r", stdin);
ios::sync_with_stdio(false);
cin.tie(NULL), cout.tie(NULL);
cin >> T;
while(T--){
cin >> len1 >> s1 >> len2 >> s2;
for(int i=0; i<len1; i++) t1[i+1] = getVal(s1[i]);
for(int i=0; i<len2; i++) t2[i+1] = getVal(s2[i]);
init();
for (int i=1; i<=len1; i++)
for (int j=1; j<=len2; j++) {
if(t1[i] == t2[j]) dp[i][j] = dp[i-1][j-1] + score[t1[i]][t2[j]];
else dp[i][j] = max(dp[i - 1][j - 1] + score[t1[i]][t2[j]],
max(dp[i - 1][j] + score[t1[i]][5],
dp[i][j - 1] + score[t2[j]][5]));
}
cout << dp[len1][len2] << endl;
}
}
HDU 1080 Human Gene Functions - 最长公共子序列(变形)的更多相关文章
- poj 1080 Human Gene Functions (最长公共子序列变形)
题意:有两个代表基因序列的字符串s1和s2,在两个基因序列中通过添加"-"来使得两个序列等长:其中每对基因匹配时会形成题中图片所示匹配值,求所能得到的总的最大匹配值. 题解:这题运 ...
- HDU 1080 Human Gene Functions
最长公共子序列的变形 题目大意:给出两个基因序列,求这两个序列的最大相似度. 题目中的表格给出了两两脱氧核苷酸的相似度. 状态转移方程为: dp[i][j] = max(dp[i-1][j]+Simi ...
- hdu 1080 Human Gene Functions(DP)
题意: 人类基因由A.C.G.T组成. 有一张5*5的基因表.每格有一个值,叫相似度.例:A-C:-3.意思是如果A和C配对, 则它俩的相似度是-3[P.S.:-和-没有相似度,即-和-不能配对] 现 ...
- poj 1080 ——Human Gene Functions——————【最长公共子序列变型题】
Human Gene Functions Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17805 Accepted: ...
- poj 1080 Human Gene Functions(lcs,较难)
Human Gene Functions Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19573 Accepted: ...
- P 1080 Human Gene Functions
大概作了一周,终于A了 类似于求最长公共子序列,稍有变形 当前序列 ch1 中字符为 a,序列 ch2 中字符为 b 则有 3 种配对方式: 1. a 与 b 2. a 与 - 3. - 与 b 动态 ...
- hdu 1080 dp(最长公共子序列变形)
题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G - G ...
- hdu 1159 Common Subsequence(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- hdu 1159 Common Subsequence(LCS最长公共子序列)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
随机推荐
- 在同一个局域网下实时访问vue项目,移动端也可以。
之前,UI看做好的页面效果,一直都是把项目打包好后放上服务器跑. 现在,UI能实时看到我的项目的页面效果情况了. 那么问题来了!!! 要怎样做到呢??? 接下来照做就行了!!! 请您先打开项目下的pa ...
- 15、python学习手册之:列表和字典
1.列表属于可变序列,支持在原处的修改 2.在标准python解锁器内部,列表就是C数组而不是链接结构 3.内置函数map对序列中的各项应用一个函数并把结果收集到一个新的列表中 eg:list(map ...
- Docker---(6)问题:bash: vi: command not found
原文:Docker---(6)问题:bash: vi: command not found 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://bl ...
- JSP中的EL表达式详细介绍
一.JSP EL语言定义 EL 提供了在 JSP 脚本编制元素范围外使用运行时表达式的功能.脚本编制元素是指页面中能够用于在 JSP 文件中嵌入 Java 代码的元素.它们通常用于对象操作以及执行那些 ...
- Day2:数据运算
一.算数运算 如: #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan print(10%2) #求模(取模) # 0 ...
- IT从业人员关注哪些问题
技术人员关注的问题非常多,但常见的至少有以下6种.特此整理,抓住核心问题,解决它. 一个人的精力和时间往往非常有限,能把核心问题都解决到位就是成功. 1.职业规划 大家从读小学开始,就是在为职业规划过 ...
- 【Codeforces Round #437 (Div. 2) B】Save the problem!
[链接]h在这里写链接 [题意] 给你一个金额N,和硬币的类型总数M; (完全背包),然后问你组成N的方案数. 使得,用这些硬币组成价值为N的金额的方案数为A; 现在A ...
- 【Codeforces Round #437 (Div. 2) C】 Ordering Pizza
[链接]h在这里写链接 [题意] 给你参赛者的数量以及一个整数S表示每块披萨的片数. 每个参数者有3个参数,si,ai,bi; 表示第i个参赛者它要吃的披萨的片数,以及吃一片第 ...
- bootstrap+fileinput插件实现可预览上传照片功能
实际项目中运用: 功能:实现上传图片,更改上传图片,移除图片的功能 <!DOCTYPE html> <html> <head> <meta charset=& ...
- System.ComponentModel.Win32Exception (0x80004005):拒绝访问。——解决办法
一.问题如下: (无法执行程序.所执行的命令为 "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /noconfi ...