匹配两个人相似度。

A,G,C。T。每两个都会有一个相应的值,给出两串基因。长度能够不一样,能够在基因中间加_使两串长度一样。然后有一个相应值。求最大相应值。

先做出相应的表

DP方程:

x=dp[i-1][j-1]+hash[str_a[i-1]][str_b[j-1]];

y=dp[i-1][j]+hash[str_a[i-1]]['-'];

z=dp[i][j-1]+hash[str_b[j-1]]['-'];

p[i][j]=Max(x,y,z);

#include "stdio.h"
#include "string.h" int Max(int a,int b,int c)
{
int x;
x=a;
if (b>x) x=b;
if (c>x) x=c;
return x;
}
int main()
{
int Case,len_a,len_b,x,y,z,i,j;
int dp[110][110],hash[210][210];
char str_a[110],str_b[110]; hash['A']['A']=hash['C']['C']=hash['T']['T']=hash['G']['G']=5;
hash['A']['C']=hash['C']['A']=hash['A']['T']=hash['T']['A']=hash['-']['T']=hash['T']['-']=-1;
hash['A']['G']=hash['G']['A']=hash['C']['T']=hash['T']['C']=hash['G']['T']=hash['T']['G']=hash['-']['G']=hash['G']['-']=-2;
hash['A']['-']=hash['-']['A']=hash['C']['G']=hash['G']['C']=-3;
hash['C']['-']=hash['-']['C']=-4; scanf("%d",&Case);
while (Case--)
{
scanf("%d%s%d%s",&len_a,str_a,&len_b,str_b); // memset(dp,0,sizeof(dp));
dp[0][0]=0;
for (i=1;i<=len_a;i++)
dp[i][0]=dp[i-1][0]+hash['-'][str_a[i-1]];
for (i=1;i<=len_b;i++)
dp[0][i]=dp[0][i-1]+hash['-'][str_b[i-1]]; for (i=1;i<=len_a;i++)
for (j=1;j<=len_b;j++)
{
x=dp[i-1][j-1]+hash[str_a[i-1]][str_b[j-1]];
y=dp[i-1][j]+hash[str_a[i-1]]['-'];
z=dp[i][j-1]+hash[str_b[j-1]]['-'];
dp[i][j]=Max(x,y,z);
}
printf("%d\n",dp[len_a][len_b]);
}
return 0;
}

HDU 1080 DP的更多相关文章

  1. hdu 1080 dp(最长公共子序列变形)

    题意: 输入俩个字符串,怎样变换使其所有字符对和最大.(字符只有'A','C','G','T','-') 其中每对字符对应的值如下: 怎样配使和最大呢. 比如: A G T G A T G -  G ...

  2. DP问题(3) : hdu 1080

    题目转自hdu 1080,题目传送门 题目大意: 不想翻译! 解题思路: 其实就是一道变异的求lcs(Longest common subsequence 最长公共子序列)的题 不过,它的依据是下面这 ...

  3. hdu 3016 dp+线段树

    Man Down Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  4. HDU 5928 DP 凸包graham

    给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...

  5. hdu 1080 Human Gene Functions(DP)

    题意: 人类基因由A.C.G.T组成. 有一张5*5的基因表.每格有一个值,叫相似度.例:A-C:-3.意思是如果A和C配对, 则它俩的相似度是-3[P.S.:-和-没有相似度,即-和-不能配对] 现 ...

  6. HDU 1080

    http://acm.hdu.edu.cn/showproblem.php?pid=1080 二维最长公共子序列 #include <iostream> #include <cstd ...

  7. HDU 1069 dp最长递增子序列

    B - Monkey and Banana Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I6 ...

  8. HDU 1160 DP最长子序列

    G - FatMouse's Speed Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  9. hdu 4826(dp + 记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4826 思路:dp[x][y][d]表示从方向到达点(x,y)所能得到的最大值,然后就是记忆化了. #i ...

随机推荐

  1. [Everyday Mathematics]20150128

    求极限 $$\bex \lim_{x\to 0}\sex{\frac{e^x+e^{2x}+\cdots+e^{nx}}{n}}^\frac{1}{x}. \eex$$

  2. UiThread DEMO

    import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import android.a ...

  3. [irving] C# Windows Beep 调用声音文件

    方法一:Console.Beep(); 方法二:可以用Console.WriteLine("/a");来代替Beep(). MSDN:http://msdn.microsoft.c ...

  4. C++指针的引用

    [1]指针的引用,必须加上头文件<iomanip>因为调用类setw() 对一个数据可以使用“引用”(reference)这是C++           对C的一个重要扩充,引用是一种新的 ...

  5. subclipse svn 在64位win7下报Failed to load JavaHL Library

  6. Linux学习笔记:CentOS安装MySQL

    [1]安装版本: 1.1 CentOS-7-x86_64-Everything-1503-01    1.2 MySQL-5.6.27-1.linux_glibc2.5.x86_64.rpm-bund ...

  7. 【和我一起学python吧】python入门语法总结

    1.python是一个解释性语言: 一个用编译性语言比如C或C++写的程序可以从源文件(即C或C++语言)转换到一个你的计算机使用的语言(二进制代码,即0和1).这个过程通过编译器和不同的标记.选项完 ...

  8. PageRank与社交网络模型评估

    SNS社交网络在近几年流行起来,并呈现出火爆的增长趋势.在仿制国外Facebook.twitter等成功先例的基础上,国内的人人网.新浪微博等一系列社交网络正风生水起. 这些社交网站表面上看起来十分普 ...

  9. [现代程序设计]homework-03

    Homework-03 队员: 11061193 薛亚杰 11061192 周敏轩    11061190 李孟 材料阅读 我们三个人将以下材料仔细阅读,觉得十分受益.下面是我们的总结和分享: 1)代 ...

  10. 浏览器插件-ActiveX

    浏览器插件:B/S模式下通过在客户端浏览器安装插件调用外设或者处理特殊格式数据. 常用插件有身份证阅读器.sim卡阅读器.银行卡校验插件.手写板插件.小键盘插件: 处理表格数据的华表插件.图片合成插件 ...