POJ 1080 Human Gene Functions
2010-12-28 10:28
393 查看
解题思路:类LCS
opt[i][j]表示第一个字符的前i个字符与第二个字符前j个字符的最大匹配值
opt[i][j]表示第一个字符的前i个字符与第二个字符前j个字符的最大匹配值
// opt[i][j]=max{opt[i-1][j-1]+w(i,j), opt[i-1][j]+w(j,-), opt[i][j-1]+w(i,-)} #include <iostream> using namespace std; inline int ctoi(char c) { switch (c) { case 'A': return 0; case 'C':return 1; case 'G':return 2; default:return 3; } } int main() { char ci[101]; int i,j,k,n,a,b,s,ai,bi,p[100],q[100],opt[2][101]; const int map[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,0}; scanf("%d", &n); while(n--) { memset(opt, 0, sizeof(opt)); scanf("%d %s", &a, ci);for(i=0;i<a;i++)p[i]=ctoi(ci[i]); scanf("%d %s", &b, ci);for(i=0;i<b;i++)q[i]=ctoi(ci[i]); for(i=1;i<=b;i++)opt[0][i]=opt[0][i-1]+map[4][q[i-1]]; for(ai=0,bi=i=1;i<=a;i++,j=ai,ai=bi,bi=j) for(opt[bi][0]=opt[ai][0]+map[4][p[i-1]],j=1;j<=b;j++) { k=p[i-1],s=q[j-1]; opt[bi][j]=max(opt[ai][j]+map[4][k], opt[bi][j-1]+map[4][s]); opt[bi][j]=max(opt[bi][j], opt[ai][j-1]+map[k][s]); } printf("%d\n", opt[ai][b]); } return 0; }
相关文章推荐
- POJ 1080 Human Gene Functions 笔记
- POJ 1080 Human Gene Functions DP
- POJ 1080 Human Gene Functions DP
- POJ 1080 Human Gene Functions DP
- poj 1080 Human Gene Functions(lcs,较难)
- POJ 1080 Human Gene Functions
- POJ 1080-Human Gene Functions(dp)
- poj 1080 Human Gene Functions lcs
- poj 1080 Human Gene Functions(dp)
- POJ 1080 && HDU 1080 Human Gene Functions(dp)
- POJ 1080 Human Gene Functions
- POJ 1080 Human Gene Functions (DP)
- POJ-1080 Human Gene Functions DP
- Human Gene Functions poj 1080 dp
- POJ1080——Human Gene Functions
- POJ 1080 Human Gene Functions(DP)
- POJ 1080_Human Gene Functions
- 【poj 1080】Human Gene Functions DP(类最长公共子序列*)
- POJ 1080 Human Gene Functions
- 【动态规划】【poj 1080】Human Gene Functions