题目链接

思路自西瓜and大佬博客:https://www.cnblogs.com/henry-1202/p/10590327.html#_label3

数据范围小 可直接dp

f[i][j][a][b] 表示 i位置上是j i-1上是a i-2上是b

状态转移是由i-1转移过来的,所以就必须还要一个i-3 所以就多加上一个循环

最主要就是转移过程中要枚举每种情况 然后排除掉

大佬的博客用了map和string简化了枚举的过程

不过他说只有六种情况 我布吉岛为啥只有六种 我写出了八种qaq

map<int, string> mp;
bool check(int a, int b, int c, int d) {
if (mp[a] + mp[b] + mp[c] == "AGC") return ;
if (mp[a] + mp[c] + mp[b] == "AGC") return ;
if (mp[a] + mp[b] + mp[d] == "AGC") return ;
if (mp[a] + mp[c] + mp[d] == "AGC") return ;
if (mp[b] + mp[a] + mp[c] == "AGC") return ;
if (mp[b] + mp[c] + mp[d] == "AGC") return ;
if (mp[b] + mp[d] + mp[c] == "AGC") return ;
if (mp[c] + mp[b] + mp[d] == "AGC") return ;
return ;
}

mp[0]='E'就是来处理刚开始未到3个字符时候的情况 不过枚举j也就是第i个位置的字符就从1开始了 所以之后的不会受到mp[0]的影响了

#include <cstdio>
#include <algorithm>
#include <string>
#include <map>
using namespace std; map<int, string> mp;
long long f[][][][];
const long long mod = 1e9 + ; bool check(int a, int b, int c, int d) {
if (mp[a] + mp[b] + mp[c] == "AGC") return ;
if (mp[a] + mp[c] + mp[b] == "AGC") return ;
if (mp[a] + mp[b] + mp[d] == "AGC") return ;
if (mp[a] + mp[c] + mp[d] == "AGC") return ;
if (mp[b] + mp[a] + mp[c] == "AGC") return ;
if (mp[b] + mp[c] + mp[d] == "AGC") return ;
if (mp[b] + mp[d] + mp[c] == "AGC") return ;
if (mp[c] + mp[b] + mp[d] == "AGC") return ;
return ;
} int main() {
int n;
scanf("%d", &n);
f[][][][] = ;
mp[] = 'E', mp[] = 'A', mp[] = 'C', mp[] = 'G', mp[] = 'T';
for (int i = ; i <= n; i++)
for (int j = ; j <= ; j++)
for (int a = ; a <= ; a++)
for (int b = ; b <= ; b++)
for (int l = ; l <= ; l++)
if (check(l, b, a, j))
f[i][j][a][b] = (f[i][j][a][b] + f[i-][a][b][l]) % mod;
long long ans = ;
for (int i = ; i <= ; i++)
for (int j = ; j <= ; j++)
for (int k = ; k <= ; k++)
ans = (ans + f[n][i][j][k]) % mod;
printf("%lld\n", ans);
return ;
}

AtCoder Beginner Contest 122 D - We Like AGC(DP)的更多相关文章

  1. AtCoder Beginner Contest 122 D - We Like AGC (DP)

    D - We Like AGC Time Limit: 2 sec / Memory Limit: 1024 MB Score : 400400 points Problem Statement Yo ...

  2. AtCoder Beginner Contest 122 解题报告

    手速选手成功混进rated only里面的前30名,但是总排名就到110+了... A - Double Helix #include <bits/stdc++.h> #define ll ...

  3. AtCoder Beginner Contest 183 E - Queen on Grid (DP)

    题意:有一个\(n\)x\(m\)的棋盘,你需要从\((1,1)\)走到\((n,m)\),每次可以向右,右下,下走任意个单位,\(.\)表示可以走,#表示一堵墙,不能通过,问从\((1,1)\)走\ ...

  4. AtCoder Beginner Contest 100 2018/06/16

    A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...

  5. AtCoder Beginner Contest 052

    没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...

  6. AtCoder Beginner Contest 053 ABCD题

    A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...

  7. AtCoder Beginner Contest 136

    AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...

  8. AtCoder Beginner Contest 137 F

    AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...

  9. AtCoder Beginner Contest 076

    A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...

随机推荐

  1. Java设计模式——适配器模式(Adapter)

    目的:把源类型适配为目标类型,以适应客户端(Client)的需求:此处我们把目标接口的调用方视为客户端 使用场景:需要对类型进行由源类型到目标类型转换的场景中 前置条件:已有客户端 //Client ...

  2. WPF:使用TypeConverter

    所谓TypeConverter就是类型转换器,支持两种类型之间相互转换 你可以重写转换逻辑,只要你清楚转换的协议,就可以实现类型互转. 定义一个Person类型,具有一个int类型的Age属性: pu ...

  3. Linux命令学习总结:ls

    命令简介: ls命令用来列出目标目录(缺省的话为当前目录)中所有的子目录和文件.指令英文原义:list 指令所在路径:/bin/ls 执行权限:All User 命令语法: ls [OPTION].. ...

  4. SQL语句更新时间字段的年份、月份、天数、时、分、秒

    SQL语句更新时间字段的年份.月份.天数.时.分.秒 --修改d表日期字段的年份update dset birth=STUFF(convert(nvarchar(23),birth,120),1,4, ...

  5. USB初学(一)---USB-HID的初步认识【转】

    HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容. USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备.那什么是设 ...

  6. windows下安装MongoDB扩展和配置

    windows下安装MongoDB扩展和配置 1.下载mongoDB扩展,根据当前php版本进行下载 地址如下:http://pecl.php.net/package/mongo 我本地php版本是 ...

  7. Python面试笔记三

    1. 类继承 有如下的一段代码: python对象 如何调用类A的show方法了,方法如下: python对象 __class__方法指向了类对象,只用给他赋值类型A,然后调用方法show,但是用完了 ...

  8. PHP程序污点型漏洞静态检测方法

    这篇文献,作者针对基于PHP语言开发的web应用程序产生的污点型漏洞,提出了一种静态代码分析检测的方法.       先解释一下什么叫污点型漏洞,由于对于用户的输入没有进行有效的过滤,使其进入敏感函数 ...

  9. 周末班:Python基础之并发编程

    进程 相关概念 进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本 ...

  10. MySQL之视图、触发器、事务、存储过程、函数

    一 视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的 ...