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 ,对齐后就是(为了表达对 ...
随机推荐
- nodejs 休眠 / 暂停执行指定毫秒
//************** 暂停 / 休眠指定毫秒值 *********************************// milliSeconds 暂停 / 休眠多少毫秒async func ...
- PIE SDK矢量分级渲染
1. 功能简介 分级渲染是矢量的一种数据表达方式.通过选取一个字段,并根据实际需要对字段的数据进行分级,并对每一级设置不同的符号,已达到区分显示的效果. 2. 功能实现说明 2.1. 实现思路及原理说 ...
- Android百分比布局方案
百分比布局让其中的控件在指定高度,宽度,margin时使用屏幕宽高的百分比,不使用dp,px.这样一套布局可以适应多个屏幕,方便适配.如: app:layout_heightPercent=" ...
- mysqy 特别小点
1从另外一个 表的查询结果中查数据(没有条件(无where)) SELECT * FROM (SELECT * FROM students) as aSELECT * FROM student ...
- JMS介绍
JMS简单描述: JMS即Java消息服务(Java Message Service),是一个Java平台中面向消息中间件的API,用于在两个应用程序之间或分布式系统中发送.接受消息,从而进行异步通信 ...
- 远程上传下载文件-Xftp5
Xftp5下载 链接:https://pan.baidu.com/s/1Wzso_Q7mPy5uGOUlripEWg 密码:xfx9 安装选择家庭版 由于21端口没有开,所以不能选FTP, 选择SF ...
- Java基础21-构造函数之间的调用
public class Test{ public static void main(String[] args){ Persion p2=new Persion("小明",22) ...
- 依赖倒置(Dependence Inversion Principle)DIP
关于抽象类和接口的区别,可以参考之前的文章~http://www.cnblogs.com/leestar54/p/4593173.html using System; using System.Col ...
- 《HTTP权威指南》之HTTP连接管理及对TCP性能的考虑
在上一篇博客中(<HTTP权威指南>之HTTP相关概念详解)我们简单对HTTP相关的基本概念做了一些简单的了解,但未对HTTP连接管理的内容做一些详细的介绍.本篇博客我们就一起来看一下HT ...
- params传递任意参数
namespace 传递任意参数{ class Program { static void Main(string[] args) { //可传递任意数量参数 Test(1, 2, "sas ...