题目链接

思路自西瓜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. bootstrap思考一

    bootstrap是一种热门的Web前端流行框架,如果要兼容PC端.手机端和响应式布局,那他一定是我的首选.bootstrap内容很多,功能强大,其中最好入门也是很重要的就是他的栅格系统.他有四个典型 ...

  2. 第九课 表单及表单控件 html5学习4

    表单有由表单域.提示文本.表单3部分构成 一.表单控件 input 控件 1.<input />单标签2.input属性: 可以通过type属性变换形状 value默认值 name名称 c ...

  3. sqlserver操作geography方法

    参考:https://www.cnblogs.com/ytwy/p/5977848.html http://desktop.arcgis.com/zh-cn/arcmap/latest/manage- ...

  4. Python进阶之函数式编程

    函数式编程 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计 ...

  5. mac /linux vi/vim永久显示行号开启高亮模式

    临时显示:进入vi编辑器,输入命令 :set number     //下次在进入vi 无法显示行号 :set nonumber  //本次vi关闭行号显示 vi 每次修改后推荐使用命令: sourc ...

  6. 在本地硬盘安装WinPE系统,实现UEFI引导,摆脱U盘

    之前装系统一直用U盘装PE后再装系统,这次直接想把PE系统直接装在本地某个分区中,普通的PE制作工具只能直接装在一个硬盘里没法装在某个分区,百度发现没有一篇类似的文章,只能自己想办法了.目前的PE都支 ...

  7. GenericServlet 、Servlet和httpServler

    -------[转] 1.GenericServlet类是所有Servlet类的祖先类. 2.HttpServlet类继承了GenericServlet类. 3.Servlet有两个非常重要的的对象, ...

  8. MySQL服务器的安装和配置,MySQL Workbench 8.0.12安装,MySQL的基本使用

    一 MySQL服务器的安装和配置 二 MySQL Workbench 8.0.12安装 三 MySQL的基本使用 一MySQL服务器的安装和配置 MySQL是目前最为流行的开放源码的数据库,是完全网络 ...

  9. web渗透 学习计划(转载)

    作者:向生李链接:https://www.zhihu.com/question/21914899/answer/39344435来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  10. webstorm 的 .后缀名-tab快捷键

    if (key) {}//key.if tab if (!key) {}//key.else tab if (key != null) {}//key.notnull tab if (typeof k ...