码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 1080 DP

时间:2014-11-03 22:37:30      阅读:252      评论:0      收藏:0      [点我收藏+]

标签:blog   io   ar   for   2014   log   amp   size   as   

匹配两个人相似度。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\n",dp[len_a][len_b]);
    }
    return 0;
}


HDU 1080 DP

标签:blog   io   ar   for   2014   log   amp   size   as   

原文地址:http://blog.csdn.net/u011932355/article/details/40748231

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!