首页 > 代码库 > poj 1080

poj 1080

不要打我 ,存代码

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

#define maxx 105
int len1, len2, dp[maxx][maxx], s[200][200];
char g1[maxx], g2[maxx];
void init()
{
     s['A']['A'] = s['C']['C'] = s['G']['G'] = s['T']['T'] = 5;
     s['A']['C'] = s['C']['A'] = s['A']['T'] = s['T']['A'] = -1;
     s['A']['G'] = s['G']['A'] = s['C']['T'] = s['T']['C'] = -2;
     s['G']['T'] = s['T']['G'] = s['G']['-'] = s['-']['G'] = -2;
     s['A']['-'] = s['-']['A'] = s['C']['G'] = s['G']['C'] = -3;
     s['T']['-'] = s['-']['T'] = -1;
     s['C']['-'] = s['-']['C'] = -4;
}
int main()
{
    int n;
    init();
    scanf ("%d", &n);
    while (n--) {
    	memset(dp,0,sizeof(dp));
    scanf ("%d%s%d%s", &len1, g1+1, &len2, g2+1);
      int i, j;
    dp[0][0] = 0;
    for (i = 1; i <= len2; i++)
        dp[0][i] = dp[0][i-1] + s['-'][g2[i]];
    for (i = 1; i <= len1; i++)
        dp[i][0] = dp[i-1][0] + s[g1[i]]['-'];
    for (i = 1; i <= len1; i++) {
         for (j = 1; j <= len2; j++)
            dp[i][j] = max (dp[i-1][j-1] + s[g1[i]][g2[j]], max(dp[i][j-1] + s['-'][g2[j]], dp[i-1][j] + s[g1[i]]['-']));
    }
    printf("%d\n",dp[len1][len2]);
    }
    return 0;
}


poj 1080