题目描述

给出两个基因串,你需要在其中插入任意个空格,使得两个串长度相同。如果两个串的某同一位置都是字母则获得某给定收益,对于每个串的每个长度为k的连续空格段要付出a(k-1)+b的损失。求最大净收益。

输入

输入第1行一个字符串,表示小A的DNA序列。
输入第2行一个字符串,表示小B的DNA序列。
接下来4行,每行4个整数,用空格隔开,表示d数组,
具体顺序如下所示。
d(A,A)d(A,T)d(A,G)d(A,C)
d(T,A)d(T,T)d(T,G)d(T,C)
d(G,A)d(G,T)d(G,G)d(G,C)
d(C,A)d(C,T)d(C,G)d(C,C)
最后一行两个用空格隔开的正整数A,B,意义如题中所述。
对于所有测试点
有0<B<A≤1000,-1000≤d(x,y)≤1000,d(x,y)=d(y,x),
序列只包含{A,T,G,C}四种字符。
N+M<=3000

输出

输出共一行,表示两个序列的最大相似程度

样例输入

ATGG
ATCC
5 -4 -4 -4
-4 5 -4 -4
-4 -4 5 -4
-4 -4 -4 5
2 1

样例输出

4


题解

dp

显然空格匹配空格是血亏的,所以一定不会有两个位置都是空格。

于是可以分别设 $f[i][j],g[i][j],h[i][j]$ 表示第一个串匹配到 $i$ ,第二个串匹配到 $j$ ,最后为 空格&字母/字母&空格/字母&字母 的最大收益。

那么直接枚举 $i$ 和 $j$ 转移即可。

注意一下边界问题。

时间复杂度 $O(nm)$

#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 3010
#define val(c) (c == 'A' ? 0 : c == 'T' ? 1 : c == 'G' ? 2 : 3)
using namespace std;
int v[4][4] , f[N][N] , g[N][N] , h[N][N];
char A[N] , B[N];
int main()
{int n , m , i , j , p , q;scanf("%s%s" , A + 1 , B + 1) , n = strlen(A + 1) , m = strlen(B + 1);for(i = 0 ; i < 4 ; i ++ )for(j = 0 ; j < 4 ; j ++ )scanf("%d" , &v[i][j]);scanf("%d%d" , &p , &q);memset(f , 0xc0 , sizeof(f));memset(g , 0xc0 , sizeof(g));memset(h , 0xc0 , sizeof(h));f[0][1] = g[1][0] = -p , h[0][0] = 0;for(i = 2 ; i <= m ; i ++ ) f[0][i] = f[0][i - 1] - q;for(i = 2 ; i <= n ; i ++ ) g[i][0] = g[i - 1][0] - q;for(i = 1 ; i <= n ; i ++ ){for(j = 1 ; j <= m ; j ++ ){f[i][j] = max(f[i][j - 1] - q , max(g[i][j - 1] , h[i][j - 1]) - p);g[i][j] = max(max(f[i - 1][j] , h[i - 1][j]) - p , g[i - 1][j] - q);h[i][j] = max(max(f[i - 1][j - 1] , g[i - 1][j - 1]) , h[i - 1][j - 1]) + v[val(A[i])][val(B[j])];}}printf("%d\n" , max(max(f[n][m] , g[n][m]) , h[n][m]));return 0;
}

转载于:https://www.cnblogs.com/GXZlegend/p/7992539.html

【bzoj5107】[CodePlus2017]找爸爸 dp相关推荐

  1. 生活随记-找爸爸的小女孩

    地铁上人比较多的,大概在中江南路站,上来了一对年轻妈妈和小女孩,没有座位,边上有一个大叔好心让了座. 年轻妈妈感谢后,慢慢坐下了,小女孩模模糊糊的一直口齿不清的叫着"爸爸,我要爸爸" ...

  2. 《再吃十次蛋糕 就可以找爸爸了》

    <再吃十次蛋糕 就可以找爸爸了> --邱文周/文 给可爱的女儿: 爸爸和妳玩了好多次躲迷藏,每次都一下子就被妳找出来. 不过这一次,爸爸决定要躲好久好久. 妳先不要找,等妳十六岁(还要吃完 ...

  3. BZOJ3233:[AHOI2013]找硬币(DP)

    Description 小蛇是金融部部长.最近她决定制造一系列新的货币.假设她要制造的货币的面值为x1,x2,x3- 那么x1必须为1,xb必须为xa的正整数倍(b>a).例如 1,5,125, ...

  4. 2020牛客多校第3场:Two Matchings[找规律+dp]

    题目链接 解题思路:这题规律......无语: #include <iostream> #include <cstdio> #include <stack> #in ...

  5. 【BZOJ3227】红黑树,打表找规律/DP

    传送门 思路: 很有意思的一道题 DP思路十分显然,我们以最小值为例 f[x][h][0/1]表示节点数为x的子树,该树的黑高度为h,根节点颜色为红/黑时 f[x][h][0]=min{f[y][h] ...

  6. php找爸爸,暖哭!萌娃外滩找爸爸:“他两天没回家”

    "为什么到外滩来看爸爸,不在家里等他?" "前天.昨天,爸爸都没回家." "想爸爸吗?" "嗯嗯!" 这段对话发生在国庆 ...

  7. HDU 4489 找出n!个全排列数中的“波浪数” dp 思维,全排列

    这题关键还是在于找出dp的转移方程,这题是从第n个数在前n-1个数的位置中入手,然后把"波浪数"分成两派.理解起来不困难,但是要自己想到的话,其中的思维一片也不能断掉,尤其是要找到 ...

  8. 【Kuangbin 带你飞系列】 基础dp

    dp好难啊啊啊啊啊啊啊啊啊啊 HDU1024 Max Sum Plus Plus 题目大意就是给你一个序列从里面截出连续m段使每一段区间不相交并且和最大 思路就是: 集合表示 :我们先确定状态dp[i ...

  9. szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]

    寒讯内容有点过多(其实是我太菜了)水一波怕忘了(人老了)**什么是线段树** 线段树是本蒟蒻感觉用处特别大的算法 那么线段树上面的节点表示什么意思呢? 线段树,上面的节点表示一个区间,父亲节点表示的区 ...

最新文章

  1. Spring加载流程源码
  2. 初级爬虫师_初级设计师的4条视觉原则
  3. 【Java学习笔记十】输入输出流
  4. 记一次Java AES 加解密 对应C# AES加解密 的一波三折
  5. AllenAI | 用GPT-3帮助增建数据,NLI任务直接提升十个点!?
  6. java 树的数据结构_Java数据结构之树(二叉树)
  7. 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型
  8. R Studio更换外部包镜像的方法
  9. CIO:让IT成为企业的一种竞争优势
  10. 深入理解继承知识(下)
  11. html如何获取消息实体的长度,50道js面试题 XXXXX
  12. 虚拟化VMware ESXi 6.7服务器安装配置
  13. cmake中添加引用动态链接_C和C++使用对方编译的动态链接库
  14. CTabCtrl设值选项卡标签宽度的方法
  15. Wordpress中Md文章添加图片点击放大效果
  16. 多元回归的拟合优度:R^2
  17. 小成开发日记----python爬虫利用selenium实现无限刷不背单词app的酷币
  18. RFC 文档(1001-1500)
  19. Received empty response from Zabbix Agent at [agent]. Assuming that agent dropped connection because
  20. android 开游艇游戏,游艇狂飙游戏-游艇狂飙安卓版预约_第一手游网

热门文章

  1. 如何启用SAP C4C OData Event Notification
  2. 微信小程序开发系列六:微信框架API的调用
  3. python3.7对应的numpy版本_图解NumPy包一文就够了
  4. php redis微信发红包,高阶篇二 使用Redis队列发送微信模版消息
  5. c语言goto语句用法_硬件工程师必知的10个C语言技巧
  6. unity ui插件_用Unity制作GalGame/视觉小说游戏的模型素材与插件推荐
  7. 为什么要在基类使用私有数据_为什么要使用函数
  8. python3.x版本的保留字总数是多少_Python3.6.5版本的保留字总数是:()-智慧树大数据分析的python基础章节答案...
  9. yoyo跑_面对“跑腿服务坑”:悠悠跑腿、蜂鸟配送、快跑者,跑腿公司该何去何从?...
  10. php购票排位_用PHP+MySQL实现12306购票和退票以及余票查询逻辑