zoukankan      html  css  js  c++  java
  • HDU 1080 DP

    匹配两个人相似度。

    A,G,C。T。每两个都会有一个相应的值,给出两串基因。长度能够不一样,能够在基因中间加_使两串长度一样。然后有一个相应值。求最大相应值。

    先做出相应的表

    DP方程:

    x=dp[i-1][j-1]+hash[str_a[i-1]][str_b[j-1]];
    y=dp[i-1][j]+hash[str_a[i-1]]['-'];
    z=dp[i][j-1]+hash[str_b[j-1]]['-'];
    p[i][j]=Max(x,y,z);


    #include "stdio.h"
    #include "string.h"
    
    int Max(int a,int b,int c)
    {
        int x;
        x=a;
        if (b>x) x=b;
        if (c>x) x=c;
        return x;
    }
    int main()
    {
        int Case,len_a,len_b,x,y,z,i,j;
        int dp[110][110],hash[210][210];
        char str_a[110],str_b[110];
    
        hash['A']['A']=hash['C']['C']=hash['T']['T']=hash['G']['G']=5;
        hash['A']['C']=hash['C']['A']=hash['A']['T']=hash['T']['A']=hash['-']['T']=hash['T']['-']=-1;
        hash['A']['G']=hash['G']['A']=hash['C']['T']=hash['T']['C']=hash['G']['T']=hash['T']['G']=hash['-']['G']=hash['G']['-']=-2;
        hash['A']['-']=hash['-']['A']=hash['C']['G']=hash['G']['C']=-3;
        hash['C']['-']=hash['-']['C']=-4;
    
        scanf("%d",&Case);
        while (Case--)
        {
            scanf("%d%s%d%s",&len_a,str_a,&len_b,str_b);
    
        //    memset(dp,0,sizeof(dp));
            dp[0][0]=0;
            for (i=1;i<=len_a;i++)
                dp[i][0]=dp[i-1][0]+hash['-'][str_a[i-1]];
            for (i=1;i<=len_b;i++)
                dp[0][i]=dp[0][i-1]+hash['-'][str_b[i-1]];
    
            for (i=1;i<=len_a;i++)
                for (j=1;j<=len_b;j++)
                {
                    x=dp[i-1][j-1]+hash[str_a[i-1]][str_b[j-1]];
                    y=dp[i-1][j]+hash[str_a[i-1]]['-'];
                    z=dp[i][j-1]+hash[str_b[j-1]]['-'];
                    dp[i][j]=Max(x,y,z);
                }
            printf("%d
    ",dp[len_a][len_b]);
        }
        return 0;
    }
    


  • 相关阅读:
    Mysql 存储引擎中InnoDB与Myisam的主要区别
    [转]memmove函数
    _Obj* __STL_VOLATILE* __my_free_list
    [转]STL的内存分配器
    [转载]C++ 堆与栈简单的介绍
    [转载]__type_traits
    [转载]C++中 引用&与取地址&的区别
    [转载]delete指针之后应该赋值NULL
    [转载]C++中声明与定义的区别
    学习笔记ubuntu/shell
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5361101.html
Copyright © 2011-2022 走看看