题目大意:

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

分析:

说出来你们可能不相信,这个题我还没想很明白就应开始写了,然后居然写出来了。当时就是还没怎么仔细想好细节,就想,我要知道这个,就只要知道另外的几个其他的状态就好了,并没有很清楚的想明白初始条件,以及这么递归下去会递归到什么样子。

dp建立:

dp [ i ] [ j ]表示第一行前 i 个字符和第二行前 j 个字符进行匹配最多可以获得多少的得分。
递推方程:
dp [ i ] [ j ]=max { dp [ x-1 ] [ y ] + move [ a[x] ] [ 5 ] , dp [ x ] [ y-1 ] + move [ 5 ] [ b[y] ] , dp [ x-1 ] [ y-1 ] + move [ a[x] ] [ b[y] ] }

这次用的是递归,不是递推。然后为了防止重复计算,使用 best [ ] [ ] 数组记录每次递归下来的结果。类似于记忆化搜索吧。

#include<iostream>
#include<string.h>
#include<stdio.h>
#define inf 0x3f3f3f3f
using namespace std;int n;
//int dp[150][150]={0};
int a[150]={0};
int b[150]={0};
int move[6][6]={0,0,0,0,0,0,0,5,-1,-2,-1,-3,0,-1,5,-3,-2,-4,0,-2,-3,5,-2,-2,0,-1,-2,-2,5,-1,0,-3,-4,-2,-1,-inf};
int best[150][150]={0};void input()
{cin>>a[0];getchar();for(int i=1;i<=a[0];i++){char l;scanf("%c",&l);if(l=='A')a[i]=1;if(l=='C')a[i]=2;if(l=='G')a[i]=3;if(l=='T')a[i]=4;}cin>>b[0];getchar();for(int i=1;i<=b[0];i++){char l;scanf("%c",&l);if(l=='A')b[i]=1;if(l=='C')b[i]=2;if(l=='G')b[i]=3;if(l=='T')b[i]=4;}
}int my_max(int aa,int bb,int cc)
{int t=aa;if(t<bb)t=bb;if(t<cc)t=cc;return t;
}
int dp(int x,int y)
{if(x==0&&y==0)return 0;if(best[x][y]!=0)return best[x][y];/*if(a[x]==b[y]){best[x][y]=dp(x-1,y-1)+5;return best[x][y];}*/best[x][y]=my_max(dp(x-1,y)+move[a[x]][5],dp(x,y-1)+move[5][b[y]],dp(x-1,y-1)+move[a[x]][b[y]]);return best[x][y];}void init()
{for(int i=1;i<=a[0];i++){best[i][0]=best[i-1][0]+move[a[i]][5];}for(int i=1;i<=b[0];i++){best[0][i]=best[0][i-1]+move[5][b[i]];}
}int main()
{int test;cin>>test;while(test--){input();//cout<<a[0]<<b[0];init();cout<<dp(a[0],b[0])<<endl;memset(a,0,sizeof(a));memset(b,0,sizeof(b));memset(best,0,sizeof(best));}
}

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

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

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

  2. POJ 1080 Human Gene Functions(DP:LCS)

    题意: 人类基因有两条,现在给出两个字符串,有长有短,可以在字符串中插入空格,要求对照表使两个字符串得出的相似值最大. 要点: 是LCS的变形,用dp[i][j]存储第一个字符串前i个字符与第二个字符 ...

  3. HDU 1080 Human Gene Functions

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

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

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

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

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

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

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

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

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

  8. POJ 2054 Color a Tree解题报告

    题干 Bob is very interested in the data structure of a tree. A tree is a directed graph in which a spe ...

  9. POJ 2823-Sliding Window单调队列解题报告

    链接:http://poj.org/problem?id=2823 利用单调队列的出队入队,维护区间的最值,保证队列单调递增或单调递减,要维护单调递增队列,当一个数字插入的时候,从队尾往前找到第一个比 ...

最新文章

  1. ajax跨域问题解决方案
  2. c#让程序在WIN7下兼容模式运行
  3. Proxool 连接池销毁问题
  4. HISAT2+StringTie+Ballgown安装及使用流程
  5. shell编程系列20--文本处理三剑客之awk常用选项
  6. AndroidStudio安卓原生开发_Activity的启动方法_3种activity的启动方法_显示启动Activity---Android原生开发工作笔记82
  7. vb与数据库(二)之迟到的学生信息管理系统总结
  8. Aspose.BarCode已修复关于PDF417条码识别和生成的各种问题条码控件网
  9. MySQL(1)----帮助使用
  10. android 内存清理命令,安卓手机内存怎么清理 安卓手机内存清理方法【图文】
  11. 美图秀秀一寸照片的制作
  12. 通过Nginx反向代理实现IP访问分流
  13. 知其然,而不知其所以然
  14. php幻灯片图片不显示不出来,首页幻灯片中图片无法显示的解决办法
  15. Android Telephony分析(一) ---- Phone详解
  16. 解决自己的小问题sizeof(ages) / sizeof(ages[0])是干嘛的
  17. 关于广义莫比乌斯反演的思考
  18. 8 9区别 endnote7_带鱼5-7和8-9的区别
  19. 一文了解Jeff Bezos,电商与公有云的“世界首富”
  20. Android 全景视频播放器(VR视频播放器探索)

热门文章

  1. 考研计算机统考考点,大家帮忙.有没有09年计算机考研统考大纲-之操作系统考点分析 爱问知识人...
  2. 与his系统对接方案 自动分诊导医信息管理系
  3. java 去小数方法
  4. 推荐收藏 | 统计学 常用的数据分析方法大总结!
  5. Shader学习整理
  6. 省市县插件PCASClass.js的使用
  7. C#的gei和set的写法
  8. mysql 存储过程 out 用处_mysql存储过程 OUT or INOUT argument 3 for routine
  9. php xml expat,PHP XML Expat 解析器
  10. c语言中字符切割函数split,c 语言 指针 C语言字符串分割函数split实现