题目: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. SpringMvc aop before

    1.config.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans ...

  2. Android应用的电量消耗和优化的策略

     对于Android移动应用的开发者来说,耗电量的控制一直是个老大难问题.      我们想要控制耗电量,必须要有工具或者方法比较准确的定位应用的耗电情况.下面,我们先来分析下如何计算android应 ...

  3. 【selenium+Python WebDriver API】之复选框顺序正选和顺序反选

    from selenium import webdriver from selenium.webdriver.common.by import By import os,time driver = w ...

  4. arcgis10.0 切片并发布服务及验证

    1.切片参考网址:https://jingyan.baidu.com/article/fa4125accc6bef28ac7092d7.html 2.通过下面代码验证  参考网址https://www ...

  5. Unity3D自定义编辑器简单实例

    MenuItem:在标题栏自定义菜单.需要在Editor文件夹内创建脚本,无需挂载.但是注意其下的函数必须为静态函数. using UnityEngine; using UnityEditor; pu ...

  6. YII框架学习(一)

    1.安装: windows:将php命令所在的文件夹路径加入到环境变量中,通过cmd命令:进入yii框架中的framework目录,执行: php yiic webapp ../cms linux:类 ...

  7. Xcode6中如何对scrollview进行自动布局(autolayout)

    本文转载至 http://www.cocoachina.com/ios/20141011/9871.html XCodeAutolayoutscrollView     Xcode6中极大的增强了IB ...

  8. python 基础 2.7 range与xrange的区别

    #/usr/bin/python #coding=utf-8 #@Time :2017/10/25 19:22 #@Auther :liuzhenchuan #@File :range与xrange的 ...

  9. EasyDSS RTMP流媒体解决方案之直播录像自动清理方案

    本文转自Marvin的博客: http://blog.csdn.net/marvin1311/article/details/78660592 EasyDSS_Solution直播录像清理 直播录像, ...

  10. hdu 4667 Building Fence < 计算几何模板>

    //大白p263 #include <cmath> #include <cstdio> #include <cstring> #include <string ...