POJ-1080 Human Gene Functions---类似LCS
题目链接:
https://cn.vjudge.net/problem/POJ-1080
题目大意:
给定两组序列,要你求出它们的最大相似度,每个字母与其他字母或自身和空格对应都有一个打分,求在这两个字符串中插入空格,让这两个字符串的匹配分数最大
解题思路:
类似LCS,以dp[i][j]表示s1前i位和s2前j位的最优解。
递推式为:
先不考虑括号
dp[i][j]只由dp[i-1][j-1]递推而来
if(s1[i] == s2[j])dp[i][j] = dp[i - 1][j - 1] + 5
else dp[i][j] = dp[i - 1][j - 1] + Map[id1][id2]此处Map[id1][id2]为s1[i]和s2[j]匹配的分数
考虑括号
dp[i][j]在原来基础上可以由dp[i-1][j]和dp[i][j-1]递推而来
由dp[i-1][j]递推而来的时候是s1[i]和空格匹配
由dp[i][j-1]递推而来的时候是空格和s2[j]匹配
dp[i][j] = max(dp[i][j],dp[i-1][j] + Map[id1][空格], dp[i][j - 1] + Map[空格][id2])
注意:
要初始化dp[0][i]和dp[j][0]的值(不能单纯的置为0,置为0是错误的),dp[0][0]=0
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<sstream>
#define Mem(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int INF = 1e9+;
int dp[][];
int Map[][] =
{
,-,-,-,-,
-,,-,-,-,
-,-,,-,-,
-,-,-,,-,
-,-,-,-,,
};
char s1[], s2[];
int main()
{
map<char, int>id;
id['A'] = ;
id['C'] = ;
id['G'] = ;
id['T'] = ;
id[' '] = ;
int T, n, m;
cin >> T;
while(T--)
{
cin >> n >> (s1 + );
cin >> m >> (s2 + );
Mem(dp, );
for(int i = ; i <= n; i++)
{
dp[i][] = dp[i - ][] + Map[id[s1[i]]][id[' ']];
}
for(int i = ; i <= m; i++)
{
dp[][i] = dp[][i - ] + Map[id[' ']][id[s2[i]]];
}
for(int i = ; i <= n; i++)
{
for(int j = ; j <= m; j++)
{
if(s1[i] == s2[j])
dp[i][j] = dp[i - ][j - ] + ;
else
dp[i][j] = dp[i - ][j - ] + Map[id[s1[i]]][id[s2[j]]];
//cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
dp[i][j] = max(dp[i][j], dp[i - ][j] + Map[id[s1[i]]][id[' ']]);
dp[i][j] = max(dp[i][j], dp[i][j - ] + Map[id[' ']][id[s2[j]]]);
//cout<<i<<" "<<j<<" "<<dp[i][j]<<endl;
}
//
}
cout<<dp[n][m]<<endl;
}
return ;
}
POJ-1080 Human Gene Functions---类似LCS的更多相关文章
- poj 1080 Human Gene Functions(lcs,较难)
Human Gene Functions Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19573 Accepted: ...
- poj 1080 ——Human Gene Functions——————【最长公共子序列变型题】
Human Gene Functions Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17805 Accepted: ...
- POJ 1080 Human Gene Functions -- 动态规划(最长公共子序列)
题目地址:http://poj.org/problem?id=1080 Description It is well known that a human gene can be considered ...
- poj 1080 Human Gene Functions(dp)
题目:http://poj.org/problem?id=1080 题意:比较两个基因序列,测定它们的相似度,将两个基因排成直线,如果需要的话插入空格,使基因的长度相等,然后根据那个表格计算出相似度. ...
- dp poj 1080 Human Gene Functions
题目链接: http://poj.org/problem?id=1080 题目大意: 给两个由A.C.T.G四个字符组成的字符串,可以在两串中加入-,使得两串长度相等. 每两个字符匹配时都有个值,求怎 ...
- POJ 1080 Human Gene Functions
题意:给两个DNA序列,在这两个DNA序列中插入若干个'-',使两段序列长度相等,对应位置的两个符号的得分规则给出,求最高得分. 解法:dp.dp[i][j]表示第一个字符串s1的前i个字符和第二个字 ...
- POJ 1080 Human Gene Functions 【dp】
题目大意:每次给出两个碱基序列(包含ATGC的两个字符串),其中每一个碱基与另一串中碱基如果配对或者与空串对应会有一个分数(可能为负),找出一种方式使得两个序列配对的分数最大 思路:字符串动态规划的经 ...
- poj 1080 Human Gene Functions (最长公共子序列变形)
题意:有两个代表基因序列的字符串s1和s2,在两个基因序列中通过添加"-"来使得两个序列等长:其中每对基因匹配时会形成题中图片所示匹配值,求所能得到的总的最大匹配值. 题解:这题运 ...
- POJ1080 Human Gene Functions 动态规划 LCS的变形
题意读了半年,唉,给你两串字符,然后长度不同,你能够用'-'把它们补成同样长度,补在哪里取决于得分,它会给你一个得分表,问你最大得分 跟LCS非常像的DP数组 dp[i][j]表示第一个字符串取第i个 ...
- HDU 1080 Human Gene Functions - 最长公共子序列(变形)
传送门 题目大意: 将两个字符串对齐(只包含ACGT,可以用'-'占位),按照对齐分数表(参见题目)来计算最后的分数之和,输出最大的和. 例如:AGTGATG 和 GTTAG ,对齐后就是(为了表达对 ...
随机推荐
- vue组件(持续更新)
1.vee-validate :vue的表单验证组件 网友博客介绍:https://www.cnblogs.com/xxwang/p/6104715.html
- IT职场?未来?
转自 IT职场?未来? 不能否认,有些技术大牛,生活也过的不错,工资不少挣.但是这种人,本来就不多啊,很少啊.这些人一般都是小时候就搞程序的,你觉得你半路出家,能变成这种超级牛人么?? 而且这些牛人, ...
- shell 语法
1). 条件表达式语法信息 [ 1 -eq 1 ] && echo 1 <-- 表示条件成功,执行相应操作 [ 1 -eq 1 ] || echo 1 ...
- IDEA 中tomcat启动问题时,一直出去发布状态,无法加载项目
解决方法:排查clean.build之前添加的xml中的sql语句,发现sql多写了一个逗号,导致无法加载项目.修改完sql,就可以跑了.
- 数据挖掘:提取百度知道QA中的影视信息
1. 背景 网站上爬取了部分关于影视的百度知道QA,为了后续提高影视的搜索效果,需要基于百度知道QA的答案抽取相关的影视信息. 2. 流程 目前已有基础的媒资视频库信息,基于媒资视频库中的视频名称,构 ...
- 记自己的hexo个人博客
https://othercoding.github.io/
- sqlserver2008 调试存储过程
1.创建所需要调试的存储过程,并执行一下,也就是保存好 ,我要演示的存储过程名是 “usp_Passport_GetNewDepositary” 2.找到存储过程,右键“执行存储过程”,会弹出如下的界 ...
- flutter initializing gradle终极解决方案
自己开发的公众号,可以领取淘宝内部优惠券 修改flutter.gradle文件 这种做法网上一大堆的教程,如果你还没改过建议先试下,比如这篇 Flutter 运行 一直Initializing gra ...
- 2017 年 9 月 27 日 js(1.两个select 内容互换 2.单选按钮 同意可点击下一步 3. 全选框)
1.两个select 内容互换 <!DOCTYPE html><html> <head> <meta charset="UTF- ...
- 关闭Windows 系统当前连接的Wifi以及判断物理\虚拟网卡,有线\无线网卡
1.关闭wifi ,调用Api [DllImport("Wlanapi.dll", SetLastError = true)] public static extern uint ...