poj 1080:Human Gene Functions
2014-06-17 20:32
309 查看
解题思路:
(1)打表
(2)动态规划边界状态
(3)动态规划状态转移
(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 1080 Human Gene Functions
- POJ 1080 Human Gene Functions(dp)
- poj_1080 Human Gene Functions
- poj 1080 ——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 DP
- POJ 1080 Human Gene Functions DP
- POJ 1080 Human Gene Functions(求两字符串相似度:LCS变形)
- poj 1080 Human Gene Functions(lcs,较难)
- POJ 1080 - Human Gene Functions
- 【动态规划】【poj 1080】Human Gene Functions
- 【POJ 1080】 Human Gene Functions
- Human Gene Functions poj 1080 dp
- POJ 1080 Human Gene Functions 笔记
- POJ 1080 Human Gene Functions
- POJ 1080 Human Gene Functions
- poj 1080 Human Gene Functions 解题报告(附详细分析)