AtCoder Beginner Contest 122 D - We Like AGC(DP)
思路自西瓜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)的更多相关文章
- 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 ...
- AtCoder Beginner Contest 122 解题报告
手速选手成功混进rated only里面的前30名,但是总排名就到110+了... A - Double Helix #include <bits/stdc++.h> #define ll ...
- AtCoder Beginner Contest 183 E - Queen on Grid (DP)
题意:有一个\(n\)x\(m\)的棋盘,你需要从\((1,1)\)走到\((n,m)\),每次可以向右,右下,下走任意个单位,\(.\)表示可以走,#表示一堵墙,不能通过,问从\((1,1)\)走\ ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
随机推荐
- MySQL优化特定类型的查询
优化关联查询 如果想要优化使用关联的查询,我们需要特别留意以下几点: 确保ON或者USING子句中的列上有索引.在创建索引的时候需要考虑到关联的顺序.当表A和表B用列c关联的时候,如果优化器的关联顺序 ...
- Html和Css学习笔记-html进阶-div与span
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! 此篇博客是我的复习笔记,html和css学的时间太久了,忘得差不多了,最近要使用一下,所以重新打开html的书略读,后记录了标签 ...
- 解决: 移动端经mouseover显示出的弹层中链接点击问题
通常我们会遇到这样的需求,导航菜单在鼠标划过的时候显示自定义弹层,在弹层中有一些链接需要点击后跳转或者其他一些事件.比如: $(".menu li").on("mouse ...
- keras & tensorflow 列出可用GPU 和 切换CPU & GPU
列出可用GPU from tensorflow.python.client import device_lib print(device_lib.list_local_devices()) from ...
- MongoDB的存储结构及对空间使用率的影响
MongoDB的存储结构及对空间使用率的影响 使用MongoDB一段时间的同学肯定会发现,MongoDB往往会占用比实际数据大小多不少空间的问题.如果利用db.stats()命令去查看,会发现Mong ...
- linux初学者常用必备命令整理
Linux命令学习 1.文件&目录处理 ls -a 全部文件 -l 详细信息 -r 递归显示子目录结构 ls -al 相当于 ls -a -l cd ..上级目录 .当前目录 ~家目录 cd ...
- 牛客网:java入门实现遍历目录
项目介绍 遍历目录是操作文件时的一个常见需求.比如写一个程序,需要找到并处理指定目录下的所有JS文件时,就需要遍历整个目录.该项目教会你如何使用流式编程和lambda表达式,帮助你进一步熟悉java8 ...
- 安装vmware-tools遇the path "" is not valid path to the gcc binary和the path "" is not a valid path to the 3.10.0-327.e17.x86_64 kernel headers问题解决
#./vmware-install.pl踩点: 1.the path "" is not valid path to the gcc binary 2.the path " ...
- 前后端分离djangorestframework—— 接入支付宝支付平台
支付宝 简介 支付宝是什么不用多说了,本次教程适合初学者 前提准备 话不多说,干就完了 1.注册开发者账号,设置公钥私钥 首先进入支付宝开发者平台:传送门 ,有账号直接登录,没账号用你平时用来付款收钱 ...
- LeetCode算法题-Baseball Game(Java实现)
这是悦乐书的第288次更新,第305篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第156题(顺位题号是682).你现在是棒球比赛点记录器.给定一个字符串列表,每个字符串 ...