2013年12月17日 星期二

[LA] 2324 - Human Gene Functions


#include<stdio.h>
#include<string.h>
char a[105],b[105];
int s[256][256];
int dp[105][105]={0};
int main(){
    int t,n,m,i,j;
    scanf("%d",&t);
    s['A']['A']=5,s['A']['C']=-1,s['A']['G']=-2,s['A']['T']=-1,s['A']['-']=-3,
    s['C']['A']=-1,s['C']['C']=5,s['C']['G']=-3,s['C']['T']=-2,s['C']['-']=-4,
    s['G']['A']=-2,s['G']['C']=-3,s['G']['G']=5,s['G']['T']=-2,s['G']['-']=-2,
    s['T']['A']=-1,s['T']['C']=-2,s['T']['G']=-2,s['T']['T']=5,s['T']['-']=-1,
    s['-']['A']=-3,s['-']['C']=-4,s['-']['G']=-2,s['-']['T']=-1,s['-']['-']=0;
    while(t--){
        scanf("%d%s%d%s",&n,&a[1],&m,&b[1]);
        memset(dp,-1,sizeof(dp));
        for(i=0;i<=n;i++)
        for(j=0;j<=m;j++)
        dp[i][j]=-999999999;
        dp[0][0]=0;
        for(i=0;i<=n;i++){
            for(j=0;j<=m;j++){
                if(!i&&!j) continue;
                if(i-1>=0 && dp[i-1][j]+s[a[i]]['-']>dp[i][j])
                dp[i][j]=dp[i-1][j]+s[a[i]]['-'];
                if(j-1>=0 && dp[i][j-1]+s['-'][b[j]]>dp[i][j])
                dp[i][j]=dp[i][j-1]+s['-'][b[j]];
                if(i-1>=0 && j-1>=0 && dp[i-1][j-1]+s[a[i]][b[j]]>dp[i][j])
                dp[i][j]=dp[i-1][j-1]+s[a[i]][b[j]];
            }
        }
       
        printf("%d\n",dp[n][m]);
    }
}

沒有留言:

張貼留言