Human Gene Functions(最长公共子序列变形题)
2013-07-03 21:54
253 查看
【题目】:问题 B: Human Gene Functions
【来源】:点击打开链接
【解法】:这个题是最长公共子序列的变形题。
1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和j对应下最大的权值
2.状态方程:写状态方程根据状态转移的情况不同,可分为从当前状态推下一个状态,还有一种是从后面个状态推前面的状态,具体分情况而定(这个地方还不是理解的很透,具体的刘汝佳的黑书上有,以后看了再补充进来)
这题是由后面的一个状态反推出前一个所有可能状态,转移方程:DP[i][j]=max{ DP[s1[i-1]][s2[j]]+ match[s1[i]][‘-’],
DP[s1[i]][s2[j-1]]+ match[‘-’][s2[j]],
DP[s1[i-1]][s2[j-1]]+match[s1[i]][s2[j]] }
3. 初值: dp[0][0]=0
dp[0][i]=dp[0][i-1]+m['-'][s2[i]]
dp[i][0]=dp[i-1][0]+m[s1[i]]['-']
【代码】:
【来源】:点击打开链接
【解法】:这个题是最长公共子序列的变形题。
1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和j对应下最大的权值
2.状态方程:写状态方程根据状态转移的情况不同,可分为从当前状态推下一个状态,还有一种是从后面个状态推前面的状态,具体分情况而定(这个地方还不是理解的很透,具体的刘汝佳的黑书上有,以后看了再补充进来)
这题是由后面的一个状态反推出前一个所有可能状态,转移方程:DP[i][j]=max{ DP[s1[i-1]][s2[j]]+ match[s1[i]][‘-’],
DP[s1[i]][s2[j-1]]+ match[‘-’][s2[j]],
DP[s1[i-1]][s2[j-1]]+match[s1[i]][s2[j]] }
3. 初值: dp[0][0]=0
dp[0][i]=dp[0][i-1]+m['-'][s2[i]]
dp[i][0]=dp[i-1][0]+m[s1[i]]['-']
【代码】:
#include <cstdio> #include <cstring> int m[150][150]; int dp[150][150]; int Max(int a,int b,int c) { if(a>=b && a>=c) return a; else if(b>=a && b>=c) return b; else return c; } int main(){ m['A']['A']=5;m['A']['C']=-1;m['A']['G']=-2;m['A']['T']=-1;m['A']['-']=-3; m['C']['A']=-1;m['C']['C']=5;m['C']['G']=-3;m['C']['T']=-2;m['C']['-']=-4; m['G']['A']=-2;m['G']['C']=-3;m['G']['G']=5;m['G']['T']=-2;m['G']['-']=-2; m['T']['A']=-1;m['T']['C']=-2;m['T']['G']=-2;m['T']['T']=5;m['T']['-']=-1; m['-']['A']=-3;m['-']['C']=-4;m['-']['G']=-2;m['-']['T']=-1;m['-']['-']=0; int i,j,N; scanf("%d",&N); while(N--) { char s1[101]={0},s2[101]={0}; int n1,n2; scanf("%d %s",&n1,s1+1); scanf("%d %s",&n2,s2+1); dp[0][0]=0; for(i=1;i<=n2;i++) dp[0][i]=dp[0][i-1]+m['-'][s2[i]]; for(i=1;i<=n1;i++) dp[i][0]=dp[i-1][0]+m[s1[i]]['-']; for(i=1;i<=n1;i++) for(j=1;j<=n2;j++) dp[i][j]=Max(dp[i-1][j-1]+m[s1[i]][s2[j]],dp[i-1][j]+m[s1[i]]['-'],dp[i][j-1]+m['-'][s2[j]]); printf("%d\n",dp[n1][n2]); } return 0; }
相关文章推荐
- poj 1080 Human Gene Functions (最长公共子序列变形)
- Human Gene Functions POJ 1080 最长公共子序列变形
- HDU 1080 Human Gene Functions(最长公共子序列变形)
- Hdu 1080 Human Gene Functions(最长公共子序列的变形)
- poj1080--Human Gene Functions(dp:LCS变形)
- hdu1080 - Human Gene Functions 最长公共子序列推广
- hdu 1080 Human Gene Functions (LCS变形)
- hdu1080 Human Gene Functions(LCS变形)
- HDU 1080 Human Gene Functions(带权值的最长公共子序列)
- HDU 1080 Human Gene Functions(LCS变形)
- POJ 1080-Human Gene Functions(LCS变形-最大得分)
- POJ1080 Human Gene Functions 动态规划 LCS的变形
- hdoj-1503-Human Gene Functions【LCS的变形】
- poj1080 Human Gene Functions (lcs变形)
- HDU 1080 Human Gene Functions(变形的LCS)
- HDU 1080 Human Gene Functions (DP,最长公共子序列)
- POJ1080 Human Gene Functions 动态规划 LCS的变形
- POJ 1080 Human Gene Functions(求两字符串相似度:LCS变形)
- hdu1080 Human Gene Functions(带权值最长公共子序列)
- POJ 1080 Human Gene Functions(LCS变形)