POJ1080分析

 

 

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class VjudgeTPOJ1080 {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        int T = Integer.parseInt(st.nextToken());
        int[][] score = {
            {0,0, 0, 0, 0, 0},
            {0,5,-1,-2,-1,-3},
            {0,-1,5,-3,-2,-4},
            {0,-2,-3,5,-2,-2},
            {0,-1,-2,-2,5,-1},
            {0,-3,-4,-2,-1,0}
        };
        for (int t = 0; t < T; t++) {
            st = new StringTokenizer(br.readLine());
            int len1 = Integer.parseInt(st.nextToken());
            char[] chars1 = st.nextToken().toCharArray();
            st = new StringTokenizer(br.readLine());
            int len2 = Integer.parseInt(st.nextToken());
            char[] chars2 = st.nextToken().toCharArray();
            
            int[][] dp = new int[len1+1][len2+1];

            for (int i = 1; i <= len1; i++) {
                char c = chars1[i-1];
                dp[i][0] = dp[i-1][0] + score[switchNum(c)][5];
            }
            for (int i = 1; i <= len2; i++) {
                char c = chars2[i-1];
                dp[0][i] = dp[0][i-1] + score[5][switchNum(c)];
            }

            for (int i = 1; i <= len1; i++) {
                for (int j = 1; j <= len2; j++) {
                    int tem = dp[i-1][j] + score[switchNum(chars1[i-1])][5];
                    tem = Math.max(dp[i][j-1] + score[5][switchNum(chars2[j-1])], tem);
                    tem = Math.max(dp[i-1][j-1] + score[switchNum(chars1[i-1])][switchNum(chars2[j-1])], tem);

                    dp[i][j] = tem;
                }
            }

            System.out.println(dp[len1][len2]);
        }
    }
    
    private static int switchNum(char c) {
        int ret = 0;
        switch (c) {
            case 'A': ret = 1; break;
            case 'C': ret = 2; break;
            case 'G': ret = 3; break;
            case 'T': ret = 4; break;
        }
        return ret;
    }
}

 

posted @ 2021-04-26 10:38  姓蜀名黍  阅读(147)  评论(0)    收藏  举报