Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
DP。#include <iostream> #include <map> #include <vector> #include <string> using namespace std; map<pair<char,char>,int> matrix; string geneA, geneB; int ma(char a, char b) { return matrix[pair<char,char>(a,b)]; } char ReA(int i) { return geneA[i-1]; } char ReB(int i) { return geneB[i-1]; } int main() { matrix[pair<char,char>('A','A')]=matrix[pair<char,char>('C','C')]= matrix[pair<char,char>('G','G')]=matrix[pair<char,char>('T','T')]=5; matrix[pair<char,char>('A','C')]=matrix[pair<char,char>('C','A')]=-1; matrix[pair<char,char>('A','G')]=matrix[pair<char,char>('G','A')]=-2; matrix[pair<char,char>('A','T')]=matrix[pair<char,char>('T','A')]=-1; matrix[pair<char,char>('A','-')]=matrix[pair<char,char>('-','A')]=-3; matrix[pair<char,char>('C','G')]=matrix[pair<char,char>('G','C')]=-3; matrix[pair<char,char>('C','T')]=matrix[pair<char,char>('T','C')]=-2; matrix[pair<char,char>('C','-')]=matrix[pair<char,char>('-','C')]=-4; matrix[pair<char,char>('G','T')]=matrix[pair<char,char>('T','G')]=-2; matrix[pair<char,char>('G','-')]=matrix[pair<char,char>('-','G')]=-2; matrix[pair<char,char>('T','-')]=matrix[pair<char,char>('-','T')]=-1; size_t T; int lenA, lenB, tem; vector<vector<int> > score(200,vector<int>(200,0)); cin >> T; while (T--){ cin >> lenA; cin >> geneA; cin >> lenB; cin >> geneB; score[0][0] = 0; tem = 0; for(int i = 1; i <= lenA; ++i){ tem += ma(ReA(i), '-'); score[i][0] = tem; } tem = 0; for(int i = 1; i <= lenB; ++i){ tem += ma(ReB(i), '-'); score[0][i] = tem; } for(int i = 1; i <= lenA; ++i){ for(int j = 1; j <= lenB; ++j){ score[i][j] = score[i][0] + score[0][j]; tem = 0; for(int k = j; k >= 1; --k){ if(score[i][j] < score[i-1][k-1] + ma(ReA(i), ReB(k)) + tem) score[i][j] = score[i-1][k-1] + ma(ReA(i), ReB(k)) + tem; if(score[i][j] < score[i-1][k] + ma(ReA(i), '-') + tem) score[i][j] = score[i-1][k] + ma(ReA(i), '-') + tem; tem += ma(ReB(k), '-'); } tem = 0; for(int k = i; k >= 1; --k){ if(score[i][j] < score[k-1][j-1] + ma(ReA(k), ReB(j)) + tem) score[i][j] = score[k-1][j-1] + ma(ReA(k), ReB(j)) + tem; if(score[i][j] < score[k][j-1] + ma('-', ReB(j)) + tem) score[i][j] = score[k][j-1] + ma('-', ReB(j)) + tem; tem += ma(ReA(k), '-'); } } } cout<<score[lenA][lenB]<<endl; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator