首页 > 其他分享 >POJ 1080 Human Gene Functions

POJ 1080 Human Gene Functions

时间:2022-12-24 09:22:17浏览次数:61  
标签:Functions ma 1080 int POJ Gene

POJ 1080 Human Gene Functions

题意:

给出两组 \(DNA\) 序列求它们的最大相似度

每个字母与其他字母或自身和空格对应都有一个打分,求在这两个字符串中插入空格,让这两个字符串的匹配分数最大?

思路

类似最短编辑距离

定义 \(f[i][j]\) 为第一组序列的 \([1,i]\) 与第二组序列的 \([1,j]\) 匹配对应的最大相似度。

转移方程: \(f[i][j] = max{f[i - 1][j - 1] + ma[a[i]][b[j]],f[i][j - 1] + ma['-'][b[j]],f[i - 1][j] + ma[a[i]]['-']]}\)

注意这里的 \(f[i][0]\) 和 \(f[0][i]\) 都需要初始化

实现:

#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 150;
char ma[N][N], a[N], b[N];
int f[N][N];

void init()
{
    ma['A']['A'] = 5;
    ma['A']['C'] = ma['C']['A'] = -1;
    ma['A']['G'] = ma['G']['A'] = -2;
    ma['A']['T'] = ma['T']['A'] = -1;
    ma['A']['-'] = ma['-']['A'] = -3;
    ma['C']['C'] = 5;
    ma['C']['G'] = ma['G']['C'] = -3;
    ma['C']['T'] = ma['T']['C'] = -2;
    ma['C']['-'] = ma['-']['C'] = -4;
    ma['G']['G'] = 5;
    ma['G']['T'] = ma['T']['G'] = -2;
    ma['G']['-'] = ma['-']['G'] = -2;
    ma['T']['T'] = 5;
    ma['T']['-'] = ma['-']['T'] = -1;
}

int main()
{
    init();
    int _;
    scanf("%d", &_);
    while (_--)
    {
        int n, m;
        scanf("%d%s", &n, a + 1);
        scanf("%d%s", &m, b + 1);

        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                f[i][j] = 0;

        for (int i = 1; i <= n; i++)
            f[i][0] = f[i - 1][0] + ma[a[i]]['-'];
        for (int i = 1; i <= m; i++)
            f[0][i] = f[0][i - 1] + ma['-'][b[i]];

        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
            {
                f[i][j] = f[i - 1][j - 1] + ma[a[i]][b[j]];
                f[i][j] = max(f[i][j], f[i][j - 1] + ma['-'][b[j]]);
                f[i][j] = max(f[i][j], f[i - 1][j] + ma[a[i]]['-']);
            }

        printf("%d\n", f[n][m]);
    }
    return 0;
}

标签:Functions,ma,1080,int,POJ,Gene
From: https://www.cnblogs.com/zxr000/p/17002027.html

相关文章

  • POJ 3176 Cow Bowling
    POJ3176CowBowling题意:给出一个数字三角形,每个分叉路口可以选择一条道路向下走,获得路上的点的权值。求可以获得的最大权值是多少?思路:从上向下走和从下向上走是一......
  • POJ 1163 The Trangle
    POJ1163TheTrangle题意:给出一个数字三角形,每个分叉路口可以选择一条道路向下走,获得路上的点的权值。求可以获得的最大权值是多少?定义状态:我们需要知道当每个位置......
  • POJ 3278 Catch That Cow(BFS)
    POJ3278CatchThatCow​ 现在你在一个数轴上的位置x,位置k上有一头牛,你要抓住这头牛,也就是走到位置k上。那怎么走呢?你有两种走路的方法,一种是从x移动到\(2\tim......
  • 【机器学习】李宏毅——Flow-based Generative Models
    前文我介绍了部分关于生成学习的内容,可以参考我这篇博文点此前面介绍的各个生成模型,都存在一定的问题:对于PixelRNN这类模型来说,就是从左上角的像素开始一个个地进行生成......
  • POJ-1088 滑雪
    POJ-1088滑雪有一个平面区域,上面有一些点,每个点对应一定的权值,每次移动只能从当前位置向上下左右四个方向中,权值小于当前位置权值的点移动,一次性最多可以移动多远(相邻位......
  • POJ-2533 Longest Ordered Subsequence
    POJ-2533LongestOrderedSubsequence题意:给出一个序列,求出这个序列的最长上升子序列序列\(A\)的上升子序列\(B\)定义如下:\(B\)为\(A\)的子序列\(B\)为严......
  • POJ-1458 Common Subsequence
    POJ-1458CommonSubsequence题意:首先对最长子序列有个定义:如果一个字符串a可以由另一个字符串b删去某些元素得到,那么说明a就是b的子序列字符串现在有两个字符串,请问最......
  • mysql系统日志 (binlog, redolog, undolog, errorlog, generallog, relaylog, slowque
    mysql系统日志(binlog,redolog,undolog,errorlog,generallog,relaylog,slowquerylog) 1.错误日志errorlog错误日志记录着mysqld服务在启动,停止,和运行过程中发......
  • 论文解读:Query Graph Generation for Answering Multi-hop Complex Questions from Kn
    论文解读:QueryGraphGenerationforAnsweringMulti-hopComplexQuestionsfromKnowledgeBases(2020ACL)简要信息:序号属性值1模型名称-2所属领域自然语言处理3研究内容KB......
  • [算法][解析几何]覆盖最多点固定半径圆问题 POJ1981 圆的扫描线 详细解法
    引题: 覆盖最多点固定半径圆问题改编自POJ1981CircleandPoint 背景:在二维平面中给定n个点,求半径为r的圆最多可以覆盖多少个点(1<=n<=300,精度eps=0.0001)输入......