题意:

人类基因有两条,现在给出两个字符串,有长有短,可以在字符串中插入空格,要求对照表使两个字符串得出的相似值最大。

要点:

是LCS的变形,用dp[i][j]存储第一个字符串前i个字符与第二个字符串前j个字符的相似值的最大值,可以这么理解,要么就两个字符串都不加空格,要么其中一个加一个不加。这样可以写出状态转移方程为:dp[i][j]=max(dp[i - 1][j - 1] + matrix[val[a[i]]][val[b[j]]],dp[i - 1][j] + matrix[val[a[i]]][val['-']], dp[i][j - 1] + matrix[val['-']][val[b[j]]])。这题的边界条件不太一样,除了dp[0][0]=0以外,其他的:dp[0][i] = dp[0][i-1] + matrix[val['-']][val[b[i]]],dp[i][0] = dp[i-1][0] + matrix[val['-'] ][val[a[i]]]。可以这么理解,为0就是空格,也是有相似值的。

15656931 Seasonal 1080 Accepted 272K 16MS C++ 1032B 2016-07-03 16:39:17
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
int dp[200][200];
int matrix[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 } };
map<char, int> val;int main()
{int i, j, t,len1,len2;val['A'] = 0; val['C'] = 1; val['G'] = 2; val['T'] = 3; val['-'] = 4;char a[200], b[200];scanf("%d", &t);while (t--){scanf("%d%s", &len1, a + 1);scanf("%d%s", &len2, b + 1);dp[0][0] = 0;for (i = 1; i <= len1; i++)dp[i][0] = dp[i-1][0] + matrix[val['-'] ][val[a[i]]];for (i = 1; i <= len2; i++)dp[0][i] = dp[0][i-1] + matrix[val['-']][val[b[i]]];for(i=1;i<=len1;i++)for (j = 1; j <= len2; j++){dp[i][j] = dp[i - 1][j - 1] + matrix[val[a[i]]][val[b[j]]];dp[i][j] = max(dp[i][j], dp[i - 1][j] + matrix[val[a[i]]][val['-']]);dp[i][j] = max(dp[i][j], dp[i][j - 1] + matrix[val['-']][val[b[j]]]);}printf("%d\n", dp[len1][len2]);}return 0;
}

转载于:https://www.cnblogs.com/seasonal/p/10343719.html

POJ 1080 Human Gene Functions(DP:LCS)相关推荐

  1. POJ - 1080 Human Gene Functions解题报告(求最长相同子序列)

    题目大意: 太长的英语,我就直接读了测试样例和题目中一些可以看的....好像是关于什么人类基因工程什么的, 腺嘌呤脱氧核糖核苷酸~ 每组测试实例给你两串由AGCT四个字母组成的字符串(每个字符串100 ...

  2. poj 1080 Human Gene Functions (最长公共子序列变形)

    题意:有两个代表基因序列的字符串s1和s2,在两个基因序列中通过添加"-"来使得两个序列等长:其中每对基因匹配时会形成题中图片所示匹配值,求所能得到的总的最大匹配值. 题解:这题运 ...

  3. POJ1080 Human Gene Functions 动态规划 LCS的变形

    题意读了半年,唉,给你两串字符,然后长度不同,你能够用'-'把它们补成同样长度,补在哪里取决于得分,它会给你一个得分表,问你最大得分 跟LCS非常像的DP数组 dp[i][j]表示第一个字符串取第i个 ...

  4. HDU 1080 Human Gene Functions

    DP,比较容易想到是2维DP,表示到第一个字符串的i和第二个字符串的j最大值是多少, 字符串下标的0在这里对应的i,j是1 #include<algorithm> #include< ...

  5. Human Gene Functions(最长公共子序列变形题)

    [题目]:问题 B:  Human Gene Functions [来源]:点击打开链接 [解法]:这个题是最长公共子序列的变形题. 1.确定状态:状态表示显然是用二维数组表示DP[i][j]当前i和 ...

  6. 刷题总结——Human Gene Functions(hdu1080)

    题目: Problem Description It is well known that a human gene can be considered as a sequence, consisti ...

  7. 【HDU - 1080】Human Gene Functions(dp,可编辑距离类问题)

    题干: 给你两个DNA序列(长度不一定相同),你可以在其中任意位置上加入空格,使得最终他俩长度相同,最终相同长度的两个DNA序列会有个相似度比较(每个字符相对应的比较),问你如何放置这些空格使得总相似 ...

  8. 动态规划(DP),Human Gene Functions

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1027 http://poj.org/problem?id=108 ...

  9. POJ1080 Human Gene Functions(LCS)

    题目链接. 分析: 和 LCS 差不多. #include <iostream> #include <cstdio> #include <cstdlib> #inc ...

最新文章

  1. MindSpore Lite整体架构介绍
  2. 2018java多线程面试题_2018JAVA面试题附答案
  3. Winfrom窗体应用程序___DataGridView
  4. Flink – WindowedStream
  5. 【转】Android Studio安装配置学习教程指南 Gradle基础--不错
  6. 【用户画像学习笔记】——社交网络平台的用户画像介绍
  7. 英雄联盟商城登录界面
  8. 隐语义模型(LFM)
  9. MySQL的DECLARE...HANDLER使用
  10. visio付款流程图_visio画程序流程图(转)
  11. html中盒子透明度代码,用CSS制作一个透明盒子
  12. R语言dplyr包学习笔记(吐血整理宇宙无敌详细版)
  13. 清华大学计算机系刘斌,queueing刘斌,男,工学博士 ,清华大学计算机科学与技...
  14. RTX3080和RTX2080TI 哪个好
  15. catalina.home和catalina.base
  16. celery爬取58同城二手车数据及若干问题
  17. IDEA查看maven依赖关系的方法
  18. PG守护进程(Postmaster)——DefineCustomTypeVariable定义GUC参数
  19. 【纸牌屋】第一季第三集经典台词
  20. python 享元模式_Python与设计模式之享元模式

热门文章

  1. akka入门书籍的示例代码
  2. java 拆分文本文件
  3. Burpsuite中protobuf数据流的解析
  4. 获取pycharm 2016.1.4 注册码 (window系统) 2016.3注册码(Ubuntu系统)
  5. Linux 进程间通信 --- 信号通信 --- signal --- signal(SIGINT, my_func); --- 按键驱动异步通知(转)...
  6. nodejs-日志组件log4js的使用方法
  7. PostgreSQL\GPDB 多维数据透视典型案例分享
  8. Template parse errors: The pipe 'translate' could not be found
  9. 非NLB网段的客户端无法访问NLB
  10. nginx限制ip访问(转)