您的位置:首页 > 其它

hdu 1080 Human Gene Functions

2013-07-27 16:50 344 查看
动态规划!!!

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<cstring>
#include<vector>
#define ll __int64
#define pi acos(-1.0)
#define MAX 50000
using namespace std;
ll dp[202][202];
int score[5][5]={
5,-1,-2,-1,-3,
-1,5,-3,-2,-4,
-2,-3,5,-2,-2,
-1,-2,-2,5,-1,
-3,-4,-2,-1,-1000
};
int swaps(char a){
if (a=='A') return 0;
if (a=='C') return 1;
if (a=='G') return 2;
if (a=='T') return 3;
return 4;
}
string str1,str2;
int main(){
int m,n,i,j,t,mmax,len1,len2,len;
cin>>t;
while (t--){
cin>>len1>>str1>>len2>>str2;
len = max(len1,len2);
dp[0][0]=0;
for (i=1;i<=len1;i++){
dp[i][0] = dp[i-1][0] + score[swaps(str1[i-1])][4];
}
for (i=1;i<=len2;i++){
dp[0][i] = dp[0][i-1] + score[4][swaps(str2[i-1])];
}
for (i=1;i<=len1;i++)
for (j=1;j<=len2;j++){
dp[i][j] = dp[i][j-1] + score[4][swaps(str2[j-1])];
if (dp[i][j] < dp[i-1][j]+score[swaps(str1[i-1])][4])
dp[i][j] = dp[i-1][j]+score[swaps(str1[i-1])][4];
if (dp[i][j] < dp[i-1][j-1]+score[swaps(str1[i-1])][swaps(str2[j-1])])
dp[i][j] = dp[i-1][j-1]+score[swaps(str1[i-1])][swaps(str2[j-1])];
}
cout<<dp[len1][len2]<<endl;
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: