链接:https://ac.nowcoder.com/acm/contest/369/A

题目描述

若你摘得小的星星 你将得到小的幸福 
若你摘得大的星星 你将得到大的财富 
若两者都能摘得 你将得到永远的愿望 
摘星是罪孽的宽恕 摘星是夜晚的奇迹 
抓住它吧 你所期望的那颗星
无法触及,因而耀眼  
明明触及了,却还是耀眼

——《少女☆歌剧 Revue·Starlight》

题目描述

"我明白。"
作为这命运剧场永远的观众,小D一直注视着这片星光璀璨的舞台,舞台上,少女们的身姿演绎出了一幕幕动人的场景,令人回味无穷。
有的时候,小D也会自己写一些歌曲,来加入Starlight的剧本,使得剧本充满了新的生命力。
现在小D又要准备写乐谱了,小D写谱的方式比较独特。他会先写出一个按照音符出现顺序排成的序列,再进一步整合,每次整合会选取相邻的三个作为三和弦。整合次数无限。
小D选取的音符形如D5 F6这种形式,例如D5表示D大调sol(这里不考虑升降音)为了方便生成乐谱,他将这些音符进一步转化了,小D给C D E F G A B重新编号成了1 2 3 4 5 6 7,之后新的音符编号生成方式应为(字母对应的标号-1)*7+数字,例如C7=(1−1)×7+7=7C7=(1−1)×7+7=7
但小D讨厌一些他所认为的不优美的和弦,因此他并不希望自己的谱子里面有可能出现这样的三和弦,也就说音符组成的序列里不应该存在他所讨厌的子段,假如C5 F1 A2这三个音符凑成的和弦小D不喜欢,那么序列里面就不能出现C5 F1 A2,C5 A2 F1,A2 C5 F1,A2 F1 C5,F1 A2 C5,F1 C5 A2这六种子段。
现在小D正在推算有多少合法的序列,答案对 109+7109+7 取模。
星屑飘洒的舞台上,可人绽放的爱之花,请努力让大家星光闪耀吧!

输入描述:

  1. 第一行为两个整数 n, q ,表示序列的长度和有多少和弦小D不喜欢.
    接下来 q 行,每行三个整数 a, b, c ,表示小D不想出现的和弦

输出描述:

  1. 一行一个整数,表示答案
示例1

输入

  1. 10 10
  2. 18 3 3
  3. 43 28 22
  4. 42 28 3
  5. 48 48 4
  6. 29 9 31
  7. 47 9 22
  8. 1 22 49
  9. 15 48 29
  10. 2 8 27
  11. 4 24 34

输出

  1. 382785822
  2.  
  3. 题意:给你一个序列长度n,现在每一个位置都有49种方案可以填入,再给出q种不合法的方案 问有多少种可行方案
    结果对1e9+7取模
    思路: dp[i][k][l] 表示第i各位置放置 kl两种音符  我们只需要枚举49^3种情况 对于 j k l 可行的情况 我们就有递推式
    dp[i][k][l]+=dp[i-1][j][k]
    其实这么看来问题就没那么复杂了
  1. #include <cstdio>
  2. #include <map>
  3. #include <iostream>
  4. #include<cstring>
  5. #include<bits/stdc++.h>
  6. #define ll long long int
  7. #define M 6
  8. using namespace std;
  9. inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
  10. inline ll lcm(ll a,ll b){return a/gcd(a,b)*b;}
  11. int moth[]={,,,,,,,,,,,,};
  12. int dir[][]={, ,, ,-, ,,-};
  13. int dirs[][]={, ,, ,-, ,,-, -,- ,-, ,,- ,,};
  14. const int inf=0x3f3f3f3f;
  15. const ll mod=1e9+;
  16. int n,q;
  17. ll dp[][][]; //dp[i][k][l] 表示第i各位置放置 k和l两种音符
  18. int a[][][];
  19. int main(){
  20. ios::sync_with_stdio(false);
  21. while(cin>>n>>q){
  22. memset(a,,sizeof(a));
  23. for(int i=;i<=q;i++){
  24. int ta,tb,tc;
  25. cin>>ta>>tb>>tc;
  26. a[ta][tb][tc]=; a[ta][tc][tb]=;
  27. a[tb][ta][tc]=; a[tb][tc][ta]=; //对不可行方案进行标记
  28. a[tc][ta][tb]=; a[tc][tb][ta]=;
  29. }
  30. for(int i=;i<=;i++)
  31. for(int j=;j<=;j++)
  32. for(int k=;k<=;k++) //初始化
  33. dp[i][j][k]=;
  34.  
  35. for(int i=;i<=n;i++)
  36. for(int j=;j<=;j++)
  37. for(int k=;k<=;k++)
  38. for(int l=;l<=;l++){
  39. if(a[j][k][l]) continue;
  40. dp[i][k][l]=(dp[i][k][l]+dp[i-][j][k])%mod;
  41. //如果是可行方案则 jk的后面就可以是l
  42. }
  43. ll ans=;
  44. for(int i=;i<=;i++)
  45. for(int j=;j<=;j++){
  46. ans=(ans+dp[n][i][j])%mod;
  47. }
  48. cout<<ans<<endl;
  49. }
  50. }

牛客练习赛40 A 小D的剧场 (思维dp)的更多相关文章

  1. 牛客练习赛40 C 小A与欧拉路(树的直径)

    链接:https://ac.nowcoder.com/acm/contest/369/C 题目描述 小A给你了一棵树,对于这棵树上的每一条边,你都可以将它复制任意(可以为0)次(即在这条边连接的两个点 ...

  2. 5.15 牛客挑战赛40 C 小V和字符串 数位dp 计数问题

    LINK:小V和字符串 容易想到只有1个数相同的 才能有贡献. 知道两个01串 那么容易得到最小步数 大体上就是 第一个串的最前的1和第二个串最前的1进行匹配. 容易想到设f[i][j]表示 前i位1 ...

  3. 牛客练习赛48 C 小w的糖果 (数学,多项式,差分)

    牛客练习赛48 C 小w的糖果 (数学,多项式) 链接:https://ac.nowcoder.com/acm/contest/923/C来源:牛客网 题目描述 小w和他的两位队友teito.toki ...

  4. 牛客练习赛48 A· 小w的a+b问题 (贪心,构造,二进制)

    牛客练习赛48 A· 小w的a+b问题 链接:https://ac.nowcoder.com/acm/contest/923/A来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C ...

  5. 牛客练习赛44 C 小y的质数 (数论,容斥定理)

    链接:https://ac.nowcoder.com/acm/contest/634/C 来源:牛客网 题目描述 给出一个区间[L,R],求出[L,R]中孪生质数有多少对. 由于这是一个区间筛质数的模 ...

  6. 牛客练习赛44 B 小y的线段 (思维)

    链接:https://ac.nowcoder.com/acm/contest/634/B 来源:牛客网 题目描述 给出n条线段,第i条线段的长度为a_ia i ​ ,每次可以从第i条线段的j位置跳到第 ...

  7. 牛客练习赛44 A 小y的序列 (模拟,细节)

    链接:https://ac.nowcoder.com/acm/contest/634/A 来源:牛客网 小y的序列 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语 ...

  8. 牛客练习赛48 D 小w的基站网络

    链接:https://ac.nowcoder.com/acm/contest/923/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  9. 5.15 牛客挑战赛40 E 小V和gcd树 树链剖分 主席树 树状数组 根号分治

    LINK:小V和gcd树 时限是8s 所以当时好多nq的暴力都能跑过. 考虑每次询问暴力 跳父亲 这样是nq的 4e8左右 随便过. 不过每次跳到某个点的时候需要得到边权 如果直接暴力gcd的话 nq ...

随机推荐

  1. C#设计模式之6:抽象工厂模式

    前面分析了简单工厂模式和工厂方法模式,接着来看一下抽象工厂模式,他与工厂方法模式有一些相似的地方,也有不同的地方. 先来看一个不用工厂方法模式实现的订购披萨的代码: 对象依赖的问题:当你直接实例化一个 ...

  2. MyBatis映射文件1(增删改、insert获取自增主键值)

    增删改 Mybatis为我们提供了<insert>.<update>.<delete>标签来对应增删改操作 在接口中写增删改的抽象方法 void addEmp(Em ...

  3. redis的配置文件解释

    redis的守护进行 守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程.它是一个生存期较长的进程,通常独立 于控制终端并且周期 ...

  4. 关于idea easyui 引入css js

    1.引用官方网站 <link rel="stylesheet" type="text/css" href="http://www.w3cscho ...

  5. java学习之—链表(2)

    /** * 双端链表操作 * Create by Administrator * 2018/6/14 0014 * 下午 2:05 **/ class Link1 { public long dDat ...

  6. 使用Guava cache构建本地缓存

    前言 最近在一个项目中需要用到本地缓存,在网上调研后,发现谷歌的Guva提供的cache模块非常的不错.简单易上手的api:灵活强大的功能,再加上谷歌这块金字招牌,让我毫不犹豫的选择了它.仅以此博客记 ...

  7. Java 基础类型 默认值

    (1)数据库里的列,如果有默认值,不能赋值有业务含义的值. (2)int 默认值 java会分配默认值的额.

  8. 如何在mac下安装php

    步骤如下: 1.下载php源码并解压 2.进入php源码并configure 3.安装openssl 4.sudo make及make test 5.sudo make install 具体命令如下: ...

  9. mysql分页查询按某类型置顶 按某类型置尾 再按优先级排序

    近段时间接到一个新需求: 第一优先级:未满的标的顺位高于已满标的顺位.第二优先级:新手标的顺位高于其他标的的顺位. 第三优先级:标的剩余可投金额少的顺位高于标的剩余可投金额多的. 我是直接通过sql语 ...

  10. 学习 Spring (十四) Introduction

    Spring入门篇 学习笔记 Introduction 允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象 由 中的 元素声明该元素用于声明所匹配的类型拥有一个新的 p ...