您的位置:首页 > 编程语言 > C语言/C++

poj 1080:Human Gene Functions

2014-06-17 20:32 309 查看
解题思路:

(1)打表

(2)动态规划边界状态

(3)动态规划状态转移

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
int v['T'+1]['T'+1];
v['A']['A'] = 5;
v['C']['C'] = 5;
v['G']['G'] = 5;
v['T']['T'] = 5;
v['A']['C'] = v['C']['A'] = -1;
v['A']['G'] = v['G']['A'] = -2;
v['A']['T'] = v['T']['A'] = -1;
v['A']['-'] = v['-']['A'] = -3;
v['C']['G'] = v['G']['C'] = -3;
v['C']['T'] = v['T']['C'] = -2;
v['C']['-'] = v['-']['C'] = -4;
v['G']['T'] = v['T']['G'] = -2;
v['G']['-'] = v['-']['G'] = -2;
v['T']['-'] = v['-']['T'] = -1;
v['-']['-'] = -9999;

int m;
cin>>m;
while(m--)
{
char a[110],b[110];
int lena=0,lenb=0;
cin>>lena;
cin>>a;
cin>>lenb;
cin>>b;

int dp[110][110];
dp[0][0]=0;
for(int i=1;i<=lena;i++)
dp[0][i] = v['-'][a[i-1]] + dp[0][i-1];
for(int i=1;i<=lenb;i++)
dp[i][0] = v['-'][b[i-1]] + dp[i-1][0];

for(int i=1;i<=lenb;i++)
{
for(int j=1;j<=lena;j++)
{
int p = dp[i-1][j] + v['-'][b[i-1]];
int q = dp[i][j-1] + v['-'][a[j-1]];
int r = dp[i-1][j-1] + v[b[i-1]][a[j-1]];
int t = max(p,q);
t = max(t,r);
dp[i][j] = t;
}
}
cout<<dp[lenb][lena]<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 动态规划 c++