hdu 1080 (DP LCS最长公共子序列)
2013-05-06 11:07
399 查看
dp[i][j]=max( max( max(dp[i-1][j]+map[s[i]]['-'], d[i][j-1]+map['-'][ss[j]])
,
dp[i-1][j-1]+map[s[i]][ss[j]]
)
,
dp[i][j]
);
View Code
,
dp[i-1][j-1]+map[s[i]][ss[j]]
)
,
dp[i][j]
);
View Code
#include<stdio.h> #include<string.h> #include<math.h> int map[6][6]={ 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,-100000 }; int fun(char ch) { if(ch=='A')return 1; if(ch=='C')return 2; if(ch=='G')return 3; if(ch=='T')return 4; return 5; } int Max(int x,int y) { return x>y?x:y; } int main() { int t,n,m,dp[110][110]; int i,j,k,a,b,c; char s1[110],s2[110]; scanf("%d",&t); while(t--) { scanf("%d %s",&n,s1+1); scanf("%d %s",&m,s2+1); memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { a=fun(s1[i]); b=fun('-'); dp[i][0]=dp[i-1][0]+map[a][b]; } for(j=1;j<=m;j++) { a=fun('-'); b=fun(s2[j]); dp[0][j]=dp[0][j-1]+map[a][b]; } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { a=fun(s1[i]); b=fun(s2[j]); c=fun('-'); dp[i][j]=Max(dp[i-1][j]+map[a][c],dp[i][j-1]+map[c][b]); dp[i][j]=Max(dp[i][j],dp[i-1][j-1]+map[a][b]); } } printf("%d\n",dp [m]); } return 0; }
相关文章推荐
- hdu 1080 (DP LCS最长公共子序列)
- 【DP|LCS】HDU-1080 Human Gene Functions
- HDU 1080 DP LCS
- HDU 1080 Human Gene Functions--DP--(最长公共子序列变形)
- hdu 1080 打表+dp(最长公共子序列)
- hdu 1503:Advanced Fruits(动态规划 DP & 最长公共子序列(LCS)问题升级版)
- HDU 1080 Human Gene Functions (DP,最长公共子序列)
- hdu1159(dp)最长公共子序列
- 最长公共子序列LCS(DP)
- 暑期dp46道(15)--HDU 1080 Human Gene Functions DFS+记忆化搜索
- HDU 1503 Advanced Fruits (LCS最长公共子序列)
- !HDU 1513 Palindrome--dp--(最长公共子序列模型)
- hdu 1159 Common Subsequence_LCS(最长公共子序列)
- 常考的经典算法--最长公共子序列(LCS)与最长公共子串(DP)
- HDU 5282 Senior's String DP(LCS变形)
- 【tyvj】【dp】最长公共子序列(LCS)
- hdu 1080 Human Gene Functions(dp)
- DP:LCS(最长公共子串、最长公共子序列)
- HDU 1087 lcs变形 (简单DP)
- poj 1080 Human Gene Functions (dp,LCS)