题目:https://www.luogu.org/problemnew/show/P4059

DP,状态应分为空格或字母,可用0和1表示,据此转移,详见代码。

另:注意初始化,因为有负值所以要先把f数组赋一个很小的值,再据题意赋值与0有关的f,特别的,f[0][0][1][1]=0。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int d[5][5],A,B,a[3005],b[3005],n,m,f[3005][3005][3][3],ans;
char dc[3005];
int main()
{
// freopen("dna.in","r",stdin);
// freopen("dna.out","w",stdout);
gets(dc);
n=strlen(dc);
for(int i=1;i<=n;i++)
{
if(dc[i-1]=='A')a[i]=1;
if(dc[i-1]=='T')a[i]=2;
if(dc[i-1]=='G')a[i]=3;
if(dc[i-1]=='C')a[i]=4;
}
gets(dc);
m=strlen(dc);
for(int i=1;i<=m;i++)
{
if(dc[i-1]=='A')b[i]=1;
if(dc[i-1]=='T')b[i]=2;
if(dc[i-1]=='G')b[i]=3;
if(dc[i-1]=='C')b[i]=4;
}
for(int i=1;i<=4;i++)
for(int j=1;j<=4;j++)
scanf("%d",&d[i][j]);
scanf("%d%d",&A,&B);
memset(f,-3,sizeof f);//!
// f[0][0][1][0]=f[0][0][0][1]=f[0][0][1][1]=0;//!!
f[0][0][1][1]=0;
f[1][0][1][0]=-A;
for(int i=2;i<=n;i++)
f[i][0][1][0]=f[i-1][0][1][0]-B;
f[0][1][0][1]=-A;
for(int i=2;i<=m;i++)
f[0][i][0][1]=f[0][i-1][0][1]-B;
// scanf("%d%d",&A,&B);//!!!顺序!!!
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
// f[i][j][0][1]=max(f[i][j][0][1],f[i][j-1][1][1]-A);
// f[i][j][0][1]=max(f[i][j][0][1],f[i][j-1][0][1]-B);
// f[i][j][0][1]=max(f[i][j][0][1],f[i][j-1][1][0]-A);
f[i][j][0][1]=max(f[i][j-1][0][1]-B,max(f[i][j-1][1][1],f[i][j-1][1][0])-A); // f[i][j][1][1]=max(f[i][j][1][1],f[i-1][j-1][1][1]+d[a[i]][b[j]]);
// f[i][j][1][1]=max(f[i][j][1][1],f[i-1][j-1][0][1]+d[a[i]][b[j]]);
// f[i][j][1][1]=max(f[i][j][1][1],f[i-1][j-1][1][0]+d[a[i]][b[j]]);
f[i][j][1][1]=max(f[i-1][j-1][1][1],max(f[i-1][j-1][0][1],f[i-1][j-1][1][0]))+d[a[i]][b[j]]; // f[i][j][1][0]=max(f[i][j][1][0],f[i-1][j][1][1]-A);
// f[i][j][1][0]=max(f[i][j][1][0],f[i-1][j][0][1]-A);
// f[i][j][1][0]=max(f[i][j][1][0],f[i-1][j][1][0]-B);
f[i][j][1][0]=max(f[i-1][j][1][0]-B,max(f[i-1][j][1][1],f[i-1][j][0][1])-A);
}
ans=max(f[n][m][1][1],max(f[n][m][0][1],f[n][m][1][0]));
printf("%d",ans);
return 0;
}

  

Codeplus2017 11月赛T3——基因的更多相关文章

  1. [LOJ 6249]「CodePlus 2017 11 月赛」汀博尔

    Description 有 n 棵树,初始时每棵树的高度为 H_i,第 i 棵树每月都会长高 A_i.现在有个木料长度总量为 S 的订单,客户要求每块木料的长度不能小于 L,而且木料必须是整棵树(即不 ...

  2. [LOJ 6248]「CodePlus 2017 11 月赛」晨跑

    Description “无体育,不清华”.“每天锻炼一小时,健康工作五十年,幸福生活一辈子” 在清华,体育运动绝对是同学们生活中不可或缺的一部分.为了响应学校的号召,模范好学生王队长决定坚持晨跑.不 ...

  3. [CodePlus 2017 11月赛&洛谷P4058]木材 题解(二分答案)

    [CodePlus 2017 11月赛&洛谷P4058]木材 Description 有 n棵树,初始时每棵树的高度为 Hi ,第 i棵树每月都会长高 Ai.现在有个木料长度总量为 S的订单, ...

  4. [CodePlus 2017 11月赛]晨跑 题解(辗转相除法求GCD)

    [CodePlus 2017 11月赛]晨跑 Description "无体育,不清华"."每天锻炼一小时,健康工作五十年,幸福生活一辈子".在清华,体育运动绝 ...

  5. [BZOJ5109][LOJ #6252][P4061][CodePlus 2017 11月赛]大吉大利,今晚吃鸡!(最短路+拓扑排序+传递闭包+map+bitset(hash+压位))

    5109: [CodePlus 2017]大吉大利,晚上吃鸡! Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 107  Solved: 57[Sub ...

  6. loj #6250. 「CodePlus 2017 11 月赛」找爸爸

    #6250. 「CodePlus 2017 11 月赛」找爸爸 题目描述 小 A 最近一直在找自己的爸爸,用什么办法呢,就是 DNA 比对. 小 A 有一套自己的 DNA 序列比较方法,其最终目标是最 ...

  7. 2019.11.11 洛谷月赛t3

    题目背景 由于Y校的老师非常毒瘤,要求\(zhouwc\)在\(csp\)考前最后\(3\)天参加期中考,\(zhouwc\)非常生气,决定消极考试,以涂完卡但全错为目标.现在\(retcarizy\ ...

  8. luogu11月月赛T3咕咕咕(组合数学)

    题目描述 小 F 是一个能鸽善鹉的同学,他经常把事情拖到最后一天才去做,导致他的某些日子总是非常匆忙. 比如,时间回溯到了 2018 年 11 月 3 日.小 F 望着自己的任务清单: 看 iG 夺冠 ...

  9. 洛谷2019 3月月赛 T3

    题干 唯一AC T3 的大巨佬%%% 这题就是个大模拟吧. 题解

随机推荐

  1. php生成唯一的串

    1.方法一: <?php md5(uniqid('aa',true)); ?> 2.方法2: //生成16位的串$randLength=6; $chars='abcdefghijklmno ...

  2. 兔子的晚会 2016Vijos省选集训 day1

    兔子的晚会 (xor.c/pas/cpp)============================= 很久很久之前,兔子王国里居住着一群兔子.每到新年,兔子国王和他的守卫总是去现场参加晚会来欢庆新年. ...

  3. EasyPlayerPro windows播放器本地配置文件配置方法介绍

    需求背景 应EasyPlayerPro某客户需求,在EasyPlayerPro启动时,自动播放指定的url源, 不需要每次都去手动填写, 且实现自动播放,不需要手动的单击播放按钮: 为响应该需求,特增 ...

  4. EasyNVR H5无插件摄像机直播解决方案前端解析之:videojs的使用

    video.js的基本使用方法 一.videojs的初始化加载 videojs初始化加载分为两中 1.标签式加载 在引入videojs加载文件的前提下,可以在video标签中添加属性值"da ...

  5. 九度OJ 1162:I Wanna Go Home(我想回家) (最短路径)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:870 解决:415 题目描述: The country is facing a terrible civil war----cities i ...

  6. java array

    1 array变量 Type[] array_virable_name; 2 array对象 2.1 new Type[] array_virable_name = new Type[NUM]; 2. ...

  7. 【题解】UVA10140 [Prime Distance]

    [题解]UVA10140 Prime Distance 哈哈哈哈\(miller-rabbin\)水过去了哈哈哈 还能怎么办呢?\(miller-rabbin\)直接搞.枚举即可,还跑得飞快. 当然此 ...

  8. 【题解】P3939数颜色

    [题解]P3939 数颜色 不要数据结构和模板学傻了... 考虑到兔子们交换都是相邻的,说明任何一次交换只会引起\(O(1)\)的变化. 我们开很多\(vector\)存没种兔子的下标就好了.到时候二 ...

  9. 【iOS开发-63】Unknown type name &quot;CGRect&quot;,did you mean &quot;Rect&quot;?的解决方式

    出现这个问题的童鞋,差点儿都是由于用了Xcode6. 原因:在Xcode6之前,创建的文件系统会自己主动为用户导入Foundation.h和UIKit.h文件,可是最新的Xcode6仅仅为用户导入了F ...

  10. 线性结构2 一元多项式的乘法与加法运算 【STL】

    02-线性结构2 一元多项式的乘法与加法运算(20 分) 设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和 ...