poj 1080 Human Gene Functions(动态规划)
2011-08-19 18:50
302 查看
原文:http://blog.acmj1991.com/?p=704
题意:给你两字符串,让你按照题目给出表格的对应关系来进行积分计算,并求最大积分
思路:动态规划 dp[i][j] 表示第一个字符串的前i与第二个字符串前j 对应的最大积分
dp[i][j]=max(dp[i-1][j-1]+mapij,dp[i-1][j]+map0i,dp[i][j-1]+mapj0)
mapij 表示第一个字符串的第i个字符于第二个字符串的第j个字符缩对应的积分
题意:给你两字符串,让你按照题目给出表格的对应关系来进行积分计算,并求最大积分
思路:动态规划 dp[i][j] 表示第一个字符串的前i与第二个字符串前j 对应的最大积分
dp[i][j]=max(dp[i-1][j-1]+mapij,dp[i-1][j]+map0i,dp[i][j-1]+mapj0)
mapij 表示第一个字符串的第i个字符于第二个字符串的第j个字符缩对应的积分
#include<stdio.h> #include<string.h> #define maxN 110 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}; int dp[maxN][maxN]; char str1[maxN],str2[maxN]; int get_id(char s) { if(s=='A')return 0; else if(s=='C')return 1; else if(s=='G')return 2; else if(s=='T')return 3; else return 4; } int max(int x,int y){return x>y?x:y;} int main() {; int t,len1,len2; scanf("%d",&t); while(t--){ scanf("%d%s",&len1,str1); scanf("%d%s",&len2,str2); for(int i=1;i<=len1;i++) dp[0][i]=dp[0][i-1]+map[4][get_id(str1[i-1])]; for(int i=1;i<=len2;i++) dp[i][0]=dp[i-1][0]+map[4][get_id(str2[i-1])]; for(int i=1;i<=len2;i++){ for(int j=1;j<=len1;j++){ int u=get_id(str1[j-1]),v=get_id(str2[i-1]); dp[i][j]=dp[i-1][j-1]+map[u][v]; dp[i][j]=max(dp[i][j],dp[i][j-1]+map[u][4]); dp[i][j]=max(dp[i][j],dp[i-1][j]+map[v][4]); } } int maxx=-0x0fffffff; for(int i=1;i<=len1;i++){ dp[len2+1][i]=dp[len2][i-1]+dp[0][len1]-dp[0][i-1]; maxx=max(maxx,dp[len2+1][i]); } for(int i=1;i<=len2;i++){ dp[i][len1+1]=dp[i-1][len1]+dp[len2][0]-dp[i-1][0]; maxx=max(maxx,dp[i][len1+1]); } maxx=max(maxx,dp[len2][len1]); printf("%d\n",maxx); } }
相关文章推荐
- POJ-1080-Human Gene Functions-LCS变体,动态规划,DP
- 【动态规划】【poj 1080】Human Gene Functions
- 动态规划----Human Gene Functions(POJ 1080)
- POJ 1080 Human Gene Functions(动态规划)
- [POJ 1080]Human Gene Functions(动态规划)
- poj 1080 -- Human Gene Functions
- POJ 1080 Human Gene Functions 笔记
- POJ 1080 Human Gene Functions (类似于编辑距离)
- POJ 1080 Human Gene Functions(DP)
- 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
- POJ-1080-Human Gene Functions
- PKU1080--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,较难)