【Hdu】1080 Human Gene Functions

原创 2015年07月07日 22:35:23
#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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

hdu 1080 Human Gene Functions 很霸气的DP

Human Gene Functions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot...

hdu1080 Human Gene Functions(LCS的变型)

Human Gene Functions   Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java...

hdu 1080 Human Gene Functions (编辑距离问题)

这题可以说是最长公共子序列的变形,后面+1变为+scores(对应匹配的分数) 注意初始化,各个字母对'-'匹配; #include #include #include #include #incl...

hdu 1080 Human Gene Functions dp

代码: #include #include #include #include #include #include #include #include #include #incl...

hdu 1080 Human Gene Functions(类最长公共子序列)

初始化一定要做好。 不然就如此地悲剧, 刚开始我还是严格按照最长公子序来写的,比较的时候是满足条件再赋值。 谁知道它就是三个一起比较。 准备用Map来映射,一直出错,不得不采用如此蹩脚的代码了...

hdu 1080 Human Gene Functions(LCS&DP)

Human Gene Functions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Ot...

hdu1080 Human Gene Functions(带权值最长公共子序列)

带权值的最长公共子序列。 原本s1[i] == s2[j]时dp[i][j] = dp[i - 1][j - 1] + 1,现在变为dp[i][j] = dp[i - 1][j - 1] + Map...

hdu 1080 Human Gene Functions LCS变体

LCS变体。 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1080 #include #include #include #include ...
  • NMfloat
  • NMfloat
  • 2015年09月06日 17:11
  • 187

hdu poj 1080 Human Gene Functions LCS 动态规划

题意:给定两DNA序列,在序列中任意位置可以插入-和另外一个碱基匹配,每种匹配有个分值,求匹配的最大分值 思路:用dp[I][j]代表放a中第I个,与放b中第j个字符时的最大分值。 什么都不放dp[0...

hdu1080 Human Gene Functions (动态规划)

http://acm.hdu.edu.cn/showproblem.php?pid=1080 难得徒手撸一题dp……并不能是lcs,只能是有点像刚看到有点迷茫,比较自然地确定一个状态dp[i][j]...
  • zjtzyrc
  • zjtzyrc
  • 2015年04月02日 13:47
  • 138
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Hdu】1080 Human Gene Functions
举报原因:
原因补充:

(最多只允许输入30个字)