您的位置:首页 > 其它

【Hdu】1080 Human Gene Functions

2015-07-07 22:35 295 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: