垒骰子

资源限制 时间限制:1.0s 内存限制:256.0MB   

赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体。经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥!
  我们先来规范一下骰子:1 的对面是 4,2 的对面是 5,3 的对面是 6。
  假设有 m 组互斥现象,每组中的那两个数字的面紧贴在一起,骰子就不能稳定的垒起来。
  atm想计算一下有多少种不同的可能的垒骰子方式。
  两种垒骰子方式相同,当且仅当这两种方式中对应高度的骰子的对应数字的朝向都相同。
  由于方案数可能过多,请输出模 10^9 + 7 的结果。

不要小看了 atm 的骰子数量哦~

「输入格式」
  第一行两个整数 n m
  n表示骰子数目
  接下来 m 行,每行两个整数 a b ,表示 a 和 b 数字不能紧贴在一起。

「输出格式」
  一行一个数,表示答案模 10^9 + 7 的结果。

「样例输入」
  2 1
  1 2

「样例输出」
  544

「数据范围」
  对于 30% 的数据:n <= 5
  对于 60% 的数据:n <= 100
  对于 100% 的数据:0 < n <= 10^9, m <= 36

资源约定:
  峰值内存消耗 < 256M
  CPU消耗 < 2000ms

1.暴力递归(递归)上至下

#include<iostream>
#include<stdio.h>
using namespace std;
int op[7];bool conflict[7][7];int main(){op[1]=4;op[4]=1;op[2]=5;op[5]=2;op[3]=6;op[6]=3;int n,m;int x,y;scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d%d",&x,&y);conflict[x][y]=true;conflict[y][x]=true;}long long dp[2][7];   //[第几层][朝上数字]  dp[][]:第几层x朝上的可能 //第几层用0和1轮流,因为只涉及到第n层和第n-1层(共两层)int cnt=0;for(int up=1;up<=6;up++){  //第一层的六种朝上情况 (初始化)dp[cnt][up]=1;  //up=1时有四种可能(四个侧面)up=2时有四种可能(四个侧面)...} for(int level=2;level<=n;level++){cnt=1-cnt; //第n层时n=1for(int up2=1;up2<=6;up2++){  //第n层 (可想为第2层)dp[cnt][up2]=0;      for(int up1=1;up1<=6;up1++){  //第n-1层 (可想为第1层)if(conflict[op[up2]][up1]) continue;dp[cnt][up2]=dp[cnt][up2]+dp[1-cnt][up1];}}}long long sum=0;for(int up2=1;up2<=6;up2++){sum+=dp[cnt][up2]; }//快速幂求n的4次方 long long ans=1;long long tmp=4;long long p=n;while(p!=0){if(p&1==1) ans=(ans*tmp)%1000000007;tmp=(tmp*tmp)%1000000007;p>>=1;}printf("%lli",(sum*ans)%1000000007);return 0;
}

2.动态规划(递推)下至上垒

#include<iostream>
#include<stdio.h>
using namespace std;
int op[7];bool conflict[7][7];int main(){op[1]=4;op[4]=1;op[2]=5;op[5]=2;op[3]=6;op[6]=3;int n,m;int x,y;scanf("%d%d",&n,&m);for(int i=0;i<m;i++){scanf("%d%d",&x,&y);conflict[x][y]=true;conflict[y][x]=true;}long long dp[2][7];   //[第几层][朝上数字]  dp[][]:第几层x朝上的可能 //第几层用0和1轮流,因为只涉及到第n层和第n-1层(共两层)int cnt=0;for(int up=1;up<=6;up++){  //第一层的六种朝上情况 (初始化)dp[cnt][up]=1;  //up=1时有四种可能(四个侧面)up=2时有四种可能(四个侧面)...} for(int level=2;level<=n;level++){cnt=1-cnt; //第n层时n=1for(int up2=1;up2<=6;up2++){  //第n层 (可想为第2层)dp[cnt][up2]=0;      for(int up1=1;up1<=6;up1++){  //第n-1层 (可想为第1层)if(conflict[op[up2]][up1]) continue;dp[cnt][up2]=dp[cnt][up2]+dp[1-cnt][up1];}}}long long sum=0;for(int up2=1;up2<=6;up2++){sum+=dp[cnt][up2]; }//快速幂求n的4次方 long long ans=1;long long tmp=4;long long p=n;while(p!=0){if(p&1==1) ans=(ans*tmp)%1000000007;tmp=(tmp*tmp)%1000000007;p>>=1;}printf("%lli",(sum*ans)%1000000007);return 0;
}


3、用矩阵(待更新)

垒骰子(递归和动态规划)相关推荐

  1. 蓝桥杯15届第九题——垒骰子(dfs、动态规划、矩阵)

    前言:该题很值得研究,为什么这么说呢? 题目考查了较多方面的知识点,相信如果将这道题完全理解的话,我们对考查的知识点应用起来会更加得心应手. 下面我会通过三种方式将题目解析透彻,从浅入深. 垒骰子题目 ...

  2. 蓝桥杯 - 垒骰子(动态规划+矩阵快速幂优化)

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

  3. 蓝桥杯垒骰子(动态规划)

    1. 问题描述: 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰 ...

  4. 矩阵快速幂+动态规划=蓝桥杯 垒骰子

    矩阵快速幂+动态规划=蓝桥杯 垒骰子 如果还不知道什么是矩阵快速幂,可以参加我的另一篇文章:矩阵快速幂详解 题目 分析 看到 nnn 的范围达到了 10910^{9}109 ,如果使用暴力搜索是不现实 ...

  5. 垒骰子动态规划-蓝桥杯

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

  6. 2015年第六届蓝桥杯 - 省赛 - C/C++大学A组 - I. 垒骰子

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

  7. 【蓝桥杯】15年初赛 垒骰子,矩阵快速幂

    题目描述 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 ...

  8. 第六届蓝桥杯JavaC组省赛真题——详细答案对照(包含垒骰子)

    A.隔行变色 Excel表的格子很多,为了避免把某行的数据和相邻行混淆,可以采用隔行变色的样式. 小明设计的样式为:第1行蓝色,第2行白色,第3行蓝色,第4行白色,.... 现在小明想知道,从第21行 ...

  9. 垒骰子|2015年蓝桥杯B组题解析第九题-fishers

    垒骰子 赌圣atm晚年迷恋上了垒骰子,就是把骰子一个垒在另一个上边,不能歪歪扭扭,要垒成方柱体. 经过长期观察,atm 发现了稳定骰子的奥秘:有些数字的面贴着会互相排斥! 我们先来规范一下骰子:1 的 ...

最新文章

  1. javascript 编辑网页
  2. Javascript中的函数重载-最佳做法
  3. virt-v2v 使用指南
  4. python list,str的拼接与转换
  5. 黑客攻防技术宝典web实战篇:攻击应用程序逻辑习题
  6. 无需一行代码,完成模型训练和部署,这个AI工具开始公测
  7. java.lang.ClassNotFoundException: org.apache.commons.codec.DecoderException
  8. 自动驾驶即将迎来下一个飞跃?
  9. 第15周学习进度情况
  10. RFC791:INTERNET PROTOCOL网络协议
  11. php中in array函数_php中in_array函数的用法
  12. Evision显示器无法设置1440*900分辨率的问题解决
  13. 如何提取视频中的音频,不需要软件,在线就能做到
  14. GIF转MP4 - 在线将GIF动态图转为MP4视频文件
  15. 硬盘分区丢失怎么找回呢?
  16. 在RISC-V星光板上创建Debian系统镜像
  17. “Tplink端口映射设置”教程---快解析
  18. 正则表达式 - 常用的正则表达式级正则的捕获
  19. 【html实现记住账号、记住密码功能】
  20. 数据埋点 ios android,iOS端数据埋点方案实现

热门文章

  1. 求节点p和q的最近公共祖先节点
  2. 使用API修改控制台输出的颜色(前景色和背景色)
  3. 《精进,如何成为一个厉害的人》采桐
  4. 【发现价值糖果空投】让你的时间花在最有价值的地方
  5. [附源码]Python计算机毕业设计Django中小学课后延时服务管理系统
  6. 研究贝塞尔曲线, 定距等分 ...
  7. 【转】免费发手机短信的内幕
  8. Firefox在iOS设备上登陆国际版账号
  9. 调用支付宝接口生成小程序二维码的坑(PHP)
  10. 主流计算机的配置软件,电脑主流配置2020推荐