题目链接

思路自西瓜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. Vue移动端项目模板

    一个集成移动端开发插件的Vue移动端模板包含1.css: 使用stylus开发css 集成reset样式文件 修改UI组件文件 统一样式处理(如主题色等)2.UI组件 使用热门的vant与mint-u ...

  2. iOS 10 设备权限问题(相机,相册等)

    iOS 10 的设备权限 需要添加的字段有: <!-- 相册 --> <key>NSPhotoLibraryUsageDescription</key> <s ...

  3. 设计模式系列之单例模式(Singleton Pattern)

    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一.这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式.这种模式涉及到一个单一的类,该类负责创建自己的对象 ...

  4. docker安装wnameless/oracle-xe-11g并运行(手写超详细)

    前景:没事想玩下linux,想着以后可以部署下自己的web项目上去,然后我就想装个oracle来着...之前都不懂linux来着,只知道公司的项目都是部署在上面,然后从装系统到装完oracle用了近五 ...

  5. 【公众号系列】SAP HANA和区块链

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP HANA和区块链   写在 ...

  6. SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器

    SQL Server -- 回忆笔记(五):T-SQL编程,系统变量,事务,游标,触发器 1. T-SQL编程 (1)声明变量 declare @age int (2)为变量赋值 (3)while循环 ...

  7. FPGA配置OV5640摄像头及RGB图像数据采集

    本文设计思想采用明德扬至简设计法.在做摄像头数据采集处理之前,需要配置OV5640传感器内部寄存器使其按要求正常工作,详细内容请参见<OV5640自动对焦照相模组应用指南>.首先要关注OV ...

  8. layui中弹出层的两种表达方式

    方式一: 定义js中定义html变量 方式二: 设置div :hidden:hidden 布局 数据表格自适应大小: 代码: <style> .btn-container { margin ...

  9. 如何删除windows中运行的历史记录

    参照下图进入到注册表,依次打开红圈中的路径,在RunMRU里面列出来的全部是记录,全部删除即可

  10. Django 简介

    一  MVC  与 MTV 模型 (1)MVC C: controller 控制器(url分发和视图函数) V: 存放html文件 M: model:数据库操作 Web服务器开发领域里著名的MVC模式 ...