poj 1080

来源:互联网 发布:head first java百度云 编辑:程序博客网 时间:2024/06/06 14:43

不要打我 ,存代码

#include <cstdio>#include <algorithm>#include <cstring>using namespace std;#define maxx 105int 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;}


0 0