Human Gene Functions(最长公共子序列变形题)
来源:互联网 发布:数据库故障应急预案 编辑:程序博客网 时间:2024/05/01 16:55
【题目】:问题 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]]['-']
【代码】:
#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;}
- Human Gene Functions(最长公共子序列变形题)
- 最长公共子序列及其变形(Human Gene Functions)(新加了一些内容)
- Hdu 1080 Human Gene Functions(最长公共子序列的变形)
- HDU 1080 Human Gene Functions--DP--(最长公共子序列变形)
- (POJ1080)Human Gene Functions <DP,最长公共子序列变形>
- hdu1080 Human Gene Functions(带权值最长公共子序列)
- ZOJ 1027 Human Gene Functions(最长公共子序列)
- hdu 1080 Human Gene Functions(类最长公共子序列)
- hdu 1080 Human Gene Functions (DP + 最长公共子序列)
- hdu1080 - Human Gene Functions 最长公共子序列推广
- HDU 1080 Human Gene Functions (DP,最长公共子序列)
- 【POJ1080】Human Gene Functions(动态规划 最长公共子序列)
- hdu 1080 Human Gene Functions( 带权值的最长公共子序列)
- HDU 1080 Human Gene Functions(带权值的最长公共子序列)
- 【poj 1080】Human Gene Functions DP(类最长公共子序列*)
- hdu 1080 Human Gene Functions( 类似最长公共子序列)
- POJ 1080 Human Gene Functions(最长公共子序列的特别版)
- POJ 1080 Human Gene Functions -- dp最长公共子序列 (变体)
- NSArray 的基本操作代码例子
- Python 命名原则
- IPv6协议及实验
- Android 4.0 ICS SystemUI浅析——StatusBar结构分析
- #杂问#wireshark的reassemble tcp含义
- Human Gene Functions(最长公共子序列变形题)
- java实现线程的两种方法有什么区别?
- linux下通过JNI用C/C++中调用JAVA类
- 移植QT
- 书籍推荐
- 初学spring:web应用程序中使用Spring
- 移动web app开发必备
- C++语言复习-命名空间
- 策略模式