题目: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. OS开发之旅之App的生命周期【转载】

    原文链接 http://www.360doc.com/content/15/0918/14/27799428_499912639.shtml 在iOS App中,入口函数并不在根目录下,而是在“Sup ...

  2. 从epoll构建muduo-12 多线程入场

    mini-muduo版本号传送门 version 0.00 从epoll构建muduo-1 mini-muduo介绍 version 0.01 从epoll构建muduo-2 最简单的epoll ve ...

  3. C市现在要转移一批罪犯到D市,C市有n名罪犯,按照入狱时间有顺序,另外每个罪犯有一个罪行值,值越大罪越重。现在为了方便管理,市长决定转移入狱时间连续的c名犯人,同时要求转移犯人的罪行值之和不超过t,问有多少种选择的方式?

    // ConsoleApplication12.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" // ConsoleApplication1 ...

  4. linux中likely()和unlikely()

    likely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢?首先明确: if (likely(value))等价于if (value) if (unlike ...

  5. linux环境tomcat配置及hadoop 2.6伪分布模式安装配置

    一.ubuntu 15.04.openjdk1.7.tomcat7环境配置 1. 配置openjdk1.7,输入命令: -jdk 2. 查看java是否安装成功,输入命令: envjava -vers ...

  6. java 面试总结

    1.static变量与实体变量的差别? static是静态变量,static能够通过类名直接訪问 内存方面的不同:static在定义的时候jvm就会分配空间, 而实体变量仅仅有在创建对象的时候才会去分 ...

  7. UVALive 6530 Football (水

    题目链接:点击打开链 #include <cstdio> #include <vector> #include <algorithm> using namespac ...

  8. Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决! 我同事遇到的问题。 username/

    Oracle 10g ORA-12154: TNS: could not resolve the connect identifier specified 问题解决! 我同事遇到的问题. userna ...

  9. 自动关闭AfxMessageBox对话框―模拟"回车" VC

    有的时候,在程序里面调用太多的AfxMessageBox(非调试用),弹出的对话框要手动关闭,时间一长就感觉很繁琐.于是上网找了一些资料,发现有一个很简单的实现AfxMessageBox对话框自动关闭 ...

  10. EasyPlayerPro(Windows)流媒体播放器开发之框架讲解

    EasyPlayerPro for Windows是基于ffmpeg进行开发的全功能播放器,开发过程中参考了很多开源的播放器,诸如vlc和ffplay等,其中最强大的莫过于vlc,但是鉴于vlc框架过 ...