【bzoj5107】[CodePlus2017]找爸爸 dp
题目描述
输入
输出
样例输入
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相关推荐
- 生活随记-找爸爸的小女孩
地铁上人比较多的,大概在中江南路站,上来了一对年轻妈妈和小女孩,没有座位,边上有一个大叔好心让了座. 年轻妈妈感谢后,慢慢坐下了,小女孩模模糊糊的一直口齿不清的叫着"爸爸,我要爸爸" ...
- 《再吃十次蛋糕 就可以找爸爸了》
<再吃十次蛋糕 就可以找爸爸了> --邱文周/文 给可爱的女儿: 爸爸和妳玩了好多次躲迷藏,每次都一下子就被妳找出来. 不过这一次,爸爸决定要躲好久好久. 妳先不要找,等妳十六岁(还要吃完 ...
- BZOJ3233:[AHOI2013]找硬币(DP)
Description 小蛇是金融部部长.最近她决定制造一系列新的货币.假设她要制造的货币的面值为x1,x2,x3- 那么x1必须为1,xb必须为xa的正整数倍(b>a).例如 1,5,125, ...
- 2020牛客多校第3场:Two Matchings[找规律+dp]
题目链接 解题思路:这题规律......无语: #include <iostream> #include <cstdio> #include <stack> #in ...
- 【BZOJ3227】红黑树,打表找规律/DP
传送门 思路: 很有意思的一道题 DP思路十分显然,我们以最小值为例 f[x][h][0/1]表示节点数为x的子树,该树的黑高度为h,根节点颜色为红/黑时 f[x][h][0]=min{f[y][h] ...
- php找爸爸,暖哭!萌娃外滩找爸爸:“他两天没回家”
"为什么到外滩来看爸爸,不在家里等他?" "前天.昨天,爸爸都没回家." "想爸爸吗?" "嗯嗯!" 这段对话发生在国庆 ...
- HDU 4489 找出n!个全排列数中的“波浪数” dp 思维,全排列
这题关键还是在于找出dp的转移方程,这题是从第n个数在前n-1个数的位置中入手,然后把"波浪数"分成两派.理解起来不困难,但是要自己想到的话,其中的思维一片也不能断掉,尤其是要找到 ...
- 【Kuangbin 带你飞系列】 基础dp
dp好难啊啊啊啊啊啊啊啊啊啊 HDU1024 Max Sum Plus Plus 题目大意就是给你一个序列从里面截出连续m段使每一段区间不相交并且和最大 思路就是: 集合表示 :我们先确定状态dp[i ...
- szu 寒训个人复习第一天 线段树入门单点修改,区间修改,以及线段树的扩展运用[线段树+dp][区间最大公约数]
寒讯内容有点过多(其实是我太菜了)水一波怕忘了(人老了)**什么是线段树** 线段树是本蒟蒻感觉用处特别大的算法 那么线段树上面的节点表示什么意思呢? 线段树,上面的节点表示一个区间,父亲节点表示的区 ...
最新文章
- Spring加载流程源码
- 初级爬虫师_初级设计师的4条视觉原则
- 【Java学习笔记十】输入输出流
- 记一次Java AES 加解密 对应C# AES加解密 的一波三折
- AllenAI | 用GPT-3帮助增建数据,NLI任务直接提升十个点!?
- java 树的数据结构_Java数据结构之树(二叉树)
- 《Effective Modern C++》翻译--条款4:了解怎样查看推导出的类型
- R Studio更换外部包镜像的方法
- CIO:让IT成为企业的一种竞争优势
- 深入理解继承知识(下)
- html如何获取消息实体的长度,50道js面试题 XXXXX
- 虚拟化VMware ESXi 6.7服务器安装配置
- cmake中添加引用动态链接_C和C++使用对方编译的动态链接库
- CTabCtrl设值选项卡标签宽度的方法
- Wordpress中Md文章添加图片点击放大效果
- 多元回归的拟合优度:R^2
- 小成开发日记----python爬虫利用selenium实现无限刷不背单词app的酷币
- RFC 文档(1001-1500)
- Received empty response from Zabbix Agent at [agent]. Assuming that agent dropped connection because
- android 开游艇游戏,游艇狂飙游戏-游艇狂飙安卓版预约_第一手游网
热门文章
- 如何启用SAP C4C OData Event Notification
- 微信小程序开发系列六:微信框架API的调用
- python3.7对应的numpy版本_图解NumPy包一文就够了
- php redis微信发红包,高阶篇二 使用Redis队列发送微信模版消息
- c语言goto语句用法_硬件工程师必知的10个C语言技巧
- unity ui插件_用Unity制作GalGame/视觉小说游戏的模型素材与插件推荐
- 为什么要在基类使用私有数据_为什么要使用函数
- python3.x版本的保留字总数是多少_Python3.6.5版本的保留字总数是:()-智慧树大数据分析的python基础章节答案...
- yoyo跑_面对“跑腿服务坑”:悠悠跑腿、蜂鸟配送、快跑者,跑腿公司该何去何从?...
- php购票排位_用PHP+MySQL实现12306购票和退票以及余票查询逻辑