SMIAMS

宝剑锋从磨砺出,梅花香自苦寒来!

【Hdu】1080 Human Gene Functions

#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;

//A:0    C:1    G:2    T:3    -:4
const int g[5][5]={  5,-1,-2,-1,-3,
                    -1, 5,-3,-2,-4,
                    -2,-3, 5,-2,-2,
                    -1,-2,-2, 5,-1,
                    -3,-4,-2,-1,-1121};
const int L=120;
const int M=-100000000;

char s[L],t[L]; int ls,lt;
int cs[L],ct[L],f[L][L];                    

inline int find(char a)
{
    if (a=='A') return 0;
    if (a=='C') return 1;
    if (a=='G') return 2;
    if (a=='T') return 3;
    return 4;
}

inline int max(int i,int j)
{
    return i>j?i:j;
}

int main(void)
{    
    int cas;
    scanf("%d",&cas);
    for (int cc=1;cc<=cas;cc++)
    {
        scanf("%d%s%d%s",&ls,&s[1],<,&t[1]);
        for (int i=1;i<=ls;i++) cs[i]=find(s[i]);
        for (int i=1;i<=lt;i++) ct[i]=find(t[i]);
    
        for (int i=0;i<=ls;i++)
            for (int j=0;j<=lt;j++) f[i][j]=M;
        f[0][0]=0;
    
        for (int i=1;i<=ls;i++) f[i][0]=f[i-1][0]+g[cs[i]][4];
        for (int j=1;j<=lt;j++) f[0][j]=f[0][j-1]+g[4][ct[j]];
        for (int i=1;i<=ls;i++)
            for (int j=1;j<=lt;j++)
            {
                f[i][j]=max(f[i-1][j]+g[cs[i]][4],f[i][j-1]+g[4][ct[j]]);
                f[i][j]=max(f[i][j],f[i-1][j-1]+g[cs[i]][ct[j]]);
            }
        printf("%d\n",f[ls][lt]);
    }
    
    return 0;
}


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013598409/article/details/46795345
个人分类: Hdu
上一篇【BZOJ】1013 球形空间产生器
下一篇【Hdu】1548 A strange lift
想对作者说点什么? 我来说一句

hdu 1080 Human Gene Functions

...

xinag578 xinag578

2015-07-24 16:33:36

阅读数:304

没有更多推荐了,返回首页

关闭
关闭