本题收获:
1 利用字符ascii值来替代数组下标,使代码更清晰
2 注意dp数组初始化时不是统一初始化为0,是依次错开所有位置(与-对应的情况)而且对于这些情况需要累加

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;#define MAX_L 100
char ca[MAX_L+10], cb[MAX_L+10];
string a, b;
int dp[MAX_L+MAX_L+10][MAX_L+MAX_L+10], score[MAX_L+100][MAX_L+100];//ascii z = 90 enoughint T;int main()
{score['A']['A'] = 5;score['A']['C'] = -1;score['A']['G'] = -2;score['A']['T'] = -1;score['A']['-'] = -3; //注意这种技巧score['C']['A'] = -1;score['C']['C'] = 5;score['C']['G'] = -3;score['C']['T'] = -2;score['C']['-'] = -4;score['G']['A'] = -2;score['G']['C'] = -3;score['G']['G'] = 5;score['G']['T'] = -2;score['G']['-'] = -2;score['T']['A'] = -1;score['T']['C'] = -2;score['T']['G'] = -2;score['T']['T'] = 5;score['T']['-'] = -1;score['-']['A'] = -3;score['-']['C'] = -4;score['-']['T'] = -2;score['-']['G'] = -1;scanf("%d", &T);while(T){T--;int lena, lenb;cin >> lena >> a;/*for(int i = 1;i <= lena;i++)ca[i] = a[i-1];*/cin >> lenb >> b;/*for(int i = 1;i <= lenb;i++)cb[i] = b[i-1];*/memset(dp, 0, sizeof(dp));//initializationfor(int i = 1;i <= lena;i++)dp[i][0] = dp[i-1][0] + score[a[i-1]]['-'];for(int j = 1;j <= lenb;j++)dp[0][j] = dp[0][j-1] + score['-'][b[j-1]];//极限情况就是完全错开for(int i = 1;i <= lena;i++)for(int j = 1;j <= lenb;j++){if(dp[i-1][j-1]+score[a[i-1]][b[j-1]] > dp[i][j-1]+score[a[i-1]]['-']){if(dp[i-1][j-1]+score[a[i-1]][b[j-1]] > dp[i-1][j]+score['-'][b[j-1]])dp[i][j] = dp[i-1][j-1]+score[a[i-1]][b[j-1]];elsedp[i][j] = dp[i-1][j]+score['-'][b[j-1]];}else{if(dp[i][j-1]+score[a[i-1]]['-'] < dp[i-1][j]+score['-'][b[j-1]])dp[i][j] =dp[i-1][j]+score['-'][b[j-1]];elsedp[i][j] = dp[i][j-1]+score[a[i-1]]['-'];}//dp[i][j] = max(dp[i-1][j-1]+score[a[i-1]][b[j-1]], max(dp[i-1][j]+score['-'][b[j-1]], dp[i][j-1]+score[a[i-1]]['-']));//printf("%d ", dp[i][j]);}printf("\n");printf("%d\n", dp[lena][lenb]);}return 0;
}

POJ 1080 Gene相关推荐

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

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

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

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

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

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

  4. 动态规划总结与题目分类

    源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少 ...

  5. 『ACM-算法-动态规划』初识DP动态规划算法

    一.多阶段决策过程的最优化问题 在现实生活中,有类活 动的过程,由于 它的特殊性,可将过程分成若干个互相阶段.在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果.当阶段决策的选取不是任意确 ...

  6. (转)dp动态规划分类详解

    dp动态规划分类详解 转自:http://blog.csdn.NET/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间 ...

  7. 《动态规划》— 动态规划分类

    动态规划(英语:Dynamic programming,DP)是一种在数学.计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法. 动态规划常常适用于有重叠子问题和最 ...

  8. 转:动态规划题目分类

    https://blog.csdn.net/cc_again/article/details/25866971 一.简单基础dp 这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见 ...

  9. 【DP专辑】ACM动态规划总结

    转载请注明出处,谢谢.   http://blog.csdn.net/cc_again?viewmode=list          ----------  Accagain  2014年5月15日 ...

  10. ACM比赛经验、刷题记录及模板库总结(更新中)

    前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...

最新文章

  1. python的range()函数用法
  2. 【洛谷P1967】[NOIP2013]货车运输
  3. grad在python什么模块_深度学习(Deep Learning)基础概念1:神经网络基础介绍及一层神经网络的python实现...
  4. 集腋成裘-10-ECharts -未知-03
  5. Python中判断回文数
  6. SAP License:ERP系统管理软件该有的“魅力”
  7. pycharm编程工具自带python环境_PyCharm配置Python3开发环境
  8. 微信小程序项目实例——家居团购
  9. 硬件驱动为什么要有WHQL数字签名
  10. ANSYS 有限元分析 接触分析
  11. 【LeetCode - 379】电话目录管理系统
  12. 国内CDN加速的背景和现状
  13. 出一本自己的书,是一种怎样的体验?
  14. @Secured注解验证无法通过的问题
  15. 部署ServletContext的时候报错 Class com.xxxxx.ContextServlet is not a Servlet
  16. 视觉3d中五折幕的震撼这就是沉浸式屏幕
  17. 竟然在GitHub标星27k+阿里大牛肝出的443页TCP/IP协议趣谈笔记,有何神奇之处?
  18. Python周刊505期
  19. KOL垂直化,品牌营销策略如何变更?
  20. Java与数据库中的datetime Timestamp以及String之间的转换

热门文章

  1. 今日头条java后端四面_今日头条笔试第二批后端开发第一题java实现
  2. 食品行业十大进销存软件功能大对比,我教你怎么选
  3. Python打包exe文件并换图标【最强版教程】
  4. 批量创建文件夹 在批量创建的文件夹下创建两个子文件夹
  5. 淘宝天猫购物优惠券系统开发,java后端(ssm)+Android 原生APP,对接淘宝开放平台
  6. 总结陈丹琦博士论文(一):NEURAL READING COMPREHENSION AND BEYOND
  7. matlab中各种线型-颜色-标记点
  8. Vue 可拖拽的组件
  9. android手机屏幕同步电脑,Android手机如何将屏幕投射到计算机上?
  10. 太经典了,不转不行淘宝上面的对话