POJ 1080 Human Gene Functions(dp)
2016-08-25 19:20
501 查看
题意:
两个字符串(基因序列),进行分值匹配, 不同字母(基因)匹配有不同分值,可以选择字母与'-'匹配,也有一定分值,最终要求小的字符串在用'-'填充之后去大的字符串长度相等,求总匹配分值最大.
思路:
和最大公共子序列的问题类似,用dp[i][j]表示到字符q[i]和字符p[j]时当前最大分数,
dp[i][j]时可以有三个选择,1.让p[i]和'-'匹配,继承dp[i-1][j]的值再加上a[p[i]['-']的值 ,因为只用到p[i], 所以只有i-1,以下类似.
2.让q[j]和'-'匹配,继承dp[i][j-1]的值加上a['-'][q[j]]的值
3,让q[j]和p[i]匹配,继承dp[i-1][j-1]的值再加上a[p[i][q[j]].
所以dp的转移方程就是dp[i][j]=max(dp[i-1][j]+a[p[i]['-'],dp[i][j-1]+a['-'][q[j]], dp[i][j]+a[p[i][q[j]].
初始化很重要:
dp[0][0]的值为0;
dp[i][0]=dp[i-1][0]+a[p[i]]['-'];
dp[0][i]=dp[0][i-1]+a[q[i]]['-'];
代码:
两个字符串(基因序列),进行分值匹配, 不同字母(基因)匹配有不同分值,可以选择字母与'-'匹配,也有一定分值,最终要求小的字符串在用'-'填充之后去大的字符串长度相等,求总匹配分值最大.
思路:
和最大公共子序列的问题类似,用dp[i][j]表示到字符q[i]和字符p[j]时当前最大分数,
dp[i][j]时可以有三个选择,1.让p[i]和'-'匹配,继承dp[i-1][j]的值再加上a[p[i]['-']的值 ,因为只用到p[i], 所以只有i-1,以下类似.
2.让q[j]和'-'匹配,继承dp[i][j-1]的值加上a['-'][q[j]]的值
3,让q[j]和p[i]匹配,继承dp[i-1][j-1]的值再加上a[p[i][q[j]].
所以dp的转移方程就是dp[i][j]=max(dp[i-1][j]+a[p[i]['-'],dp[i][j-1]+a['-'][q[j]], dp[i][j]+a[p[i][q[j]].
初始化很重要:
dp[0][0]的值为0;
dp[i][0]=dp[i-1][0]+a[p[i]]['-'];
dp[0][i]=dp[0][i-1]+a[q[i]]['-'];
代码:
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> using namespace std; int a[300][300]; int main() { a['A']['A']=a['G']['G']=a['C']['C']=a['T']['T']=5; a['A']['C']=a['C']['A']=-1; a['A']['G']=a['G']['A']=-2; a['A']['T']=a['T']['A']=-1; a['A']['-']=a['-']['A']=-3; a['C']['G']=a['G']['C']=-3; a['C']['T']=a['T']['C']=-2; a['C']['-']=a['-']['C']=-4; a['G']['T']=a['T']['G']=-2; a['G']['-']=a['-']['G']=-2; a['T']['-']=a['-']['T']=-1; a['-']['-']=-999999999; int n; scanf("%d", &n); while(n--) { int c; int d; scanf("%d", &c); char p[105], q[105]; scanf("%s", p+1); scanf("%d", &d); scanf("%s", q+1); int i, j; int dp[105][105]; dp[0][0]=0; for(i=1; i<=d; i++) dp[0][i]=dp[0][i-1]+a['-'][q[i]]; for(i=1; i<=c; i++) dp[i][0]=dp[i-1][0]+ a['-'][p[i]]; for(i=1; i<=c; i++) { for(j=1; j<=d; j++) { dp[i][j]=max(dp[i][j-1]+a[q[j]]['-'], dp[i-1][j]+a['-'][p[i]]); dp[i][j]=max(dp[i][j], dp[i-1][j-1]+a[q[j]][p[i]]); } } printf("%d\n", dp[c][d]); } return 0; }
相关文章推荐
- poj 1080 Human Gene Functions(dp)
- poj_1080 Human Gene Functions(dp)
- 【dp】POJ - 1080 Human Gene Functions
- POJ-1080 Human Gene Functions DP
- POJ-1080- Human Gene Functions-DP-LCS变形
- POJ 1080-Human Gene Functions(DP:LCS变型)
- POJ 1080-Human Gene Functions(dp)
- POJ 1080-Human Gene Functions(DP)
- POJ 1080 Human Gene Functions(dp)
- poj 1080 Human Gene Functions DP
- POJ-1080-Human Gene Functions-LCS变体,动态规划,DP
- Human Gene Functions poj 1080 dp
- POJ 1080 Human Gene Functions(DP)
- POJ 1080 Human Gene Functions DP
- POJ - 1080 Human Gene Functions (DP)
- poj--1080 Human Gene Functions(dp)
- POJ 1080 Human Gene Functions DP(LCS)
- POJ 1080 Human Gene Functions(字符串匹配得分,dp)
- poj 1080 Human Gene Functions(dp)
- POJ 1080 && HDU 1080 Human Gene Functions(dp)