hdu 1080 Human Gene Functions
2015-07-30 15:57
381 查看
题目点我
LCS变种
LCS变种
#include <stdio.h> #include <stdlib.h> #include <string.h> #define inf 0x3f3f3f3f #define len 105 char a[len], b[len]; int dp[len][len], mat[len][len]; int Max(int a, int b){ return a > b ? a : b; } int main(){ int T, i, j; mat['A']['A'] = mat['C']['C'] = mat['G']['G'] = mat['T']['T'] = 5; mat['A']['C'] = mat['C']['A'] = mat['A']['T'] = mat['T']['A'] = mat['-']['T'] = -1; mat['A']['G'] = mat['G']['A'] = mat['C']['T'] = mat['T']['C'] = mat['G']['T'] = mat['T']['G'] = mat['-']['G'] = -2; mat['-']['A'] = mat['C']['G'] = mat['G']['C'] = -3; mat['-']['C'] = -4; scanf("%d", &T); int len1, len2; while(T--){ scanf("%d%s%d%s", &len1, a, &len2, b); dp[0][0] = 0; for(i = 1; i <= len1; i++) dp[i][0] = dp[i-1][0] + mat['-'][a[i-1]]; for(j = 1; j <= len2; j++) dp[0][j] = dp[0][j-1] + mat['-'][b[j-1]]; for(i = 1; i <= len1; i++){ for(j = 1; j <= len2; j++){ dp[i][j] = Max(dp[i-1][j-1] + mat[a[i-1]][b[j-1]], Max(dp[i-1][j] + mat['-'][a[i-1]], dp[i][j-1] + mat['-'][b[j-1]])); } } printf("%d\n", dp[len1][len2]); } return 0; }
相关文章推荐
- 分隔符 空白符
- mysql 5.6安装与配置
- 无root手机版抓android包工具,超好用
- GTK进阶学习:属性改变事件
- 朴素贝叶斯分类器的应用
- POJ2387(最短路基础)
- Qt 鼠标右击菜单建立
- 四、伪分布下安装hive1.2
- 【Hibernate】(2)Hibernate配置与session、transaction
- 【原文件】tinyxmlparser.cpp
- [leetcode 97]Interleaving String
- QtGstreamer 编译
- Android(java)学习笔记137:Android中SimpleAdapter,ArrayAdapter和BaseAdapter常见的适配器
- mac下的home键、end键以及insert键的替代
- python题目练习
- nginx 配置https 环境
- 谈谈iOS中粘性动画以及果冻效果的实现
- 在64位Windows Server 2008 R2上安装mtools
- Smart_ptr源码剖析和问题探究
- JUnit中Failure、Error区别