[蓝桥杯2015初赛]垒骰子

[蓝桥杯2015初赛]垒骰子

题目大意:

给你n个骰子,给你m组不能贴在一起的面,问你把这n个骰子垒成高度为n的柱体,一共有多少种方案?

题目分析:

  • 首先,不能贴近的面是肯定不能在一起的,我们只需要每次放骰子时不把不能贴近的面放一块儿就行,也就是每个顶面,都可以再放上与它不冲突的面,最后顶面一共会出现6中情况,我们对顶面的6种情况进行dp。
  • dp[i][j]代表的就是高度为i时,顶面为j的方案数,可知
    dp[i][j]=i-1层中所有与j的反面不冲突的面相加,不管i-1层的顶面时什么,只要不与j的反面相冲突即可加入。
  • 由于n的大小有1e9,所以这道题必定要在时间复杂度优化上下功夫,这里可以看出,给你的每个面的反面都是确定的,且冲突的面都是确定的,那么状态转移是不是线性的呢?是线性的,每次都做的是一样的操作,所以我们采用矩阵快速幂优化dp
  • 不了解矩阵快速幂的同学可以先去学学

代码如下

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+7;
int n,m;
int t[7]={0,4,5,6,1,2,3};
struct node {ll v[7][7];
}first;
void init(){for(int i=1;i<7;i++)for(int j=1;j<7;j++)first.v[i][j]=1;
}node mul(node x,node y){node t;for(int i=1;i<7;i++)for(int j=1;j<7;j++){t.v[i][j]=0;for(int k=1;k<7;k++){t.v[i][j]+=(x.v[i][k]*y.v[k][j]%mod);t.v[i][j]%=mod;}}return t;
}node  mul1(node x,node y)
{node t;for(int i=1;i<=1;i++)for(int j=1;j<7;j++){t.v[i][j]=0;for(int k=1;k<7;k++){t.v[i][j]+=(x.v[i][k]*y.v[k][j]%mod);t.v[i][j]%=mod;}}return t;
}
node quick_mi(int k){node tem;for(int i=1;i<7;i++)for(int j=1;j<7;j++){if(i==j)tem.v[i][j]=1;elsetem.v[i][j]=0;}while(k){if(k&1){tem=mul(tem,first);}first=mul(first,first);k/=2;}return tem;
}
ll quick_mi1(ll x,int n)
{ll tot=1;while(n){if(n&1)tot=tot*x%mod;x=x*x%mod;n>>=1;}return tot;
}int main(){ios::sync_with_stdio(false);cin.tie(0);while(cin>>n>>m){init();while(m--){int a,b;cin>>a>>b;first.v[t[a]][b]=0;first.v[t[b]][a]=0;}node book;ll sum=0;for(int i=1;i<7;i++)book.v[1][i]=1;node ans=quick_mi(n-1);ans=mul1(book,ans);for(int i=1;i<7;i++)sum=(sum+ans.v[1][i])%mod;ll x=quick_mi1(4,n);sum=sum*x%mod;cout<<sum<<endl;}return 0;
}

有问题的话,可以在下方评论哦

共勉

[蓝桥杯2015初赛]垒骰子相关推荐

  1. 蓝桥杯2015初赛生命之树 DFS图解

    大家觉得写还可以,可以点赞.收藏.关注一下吧! 也可以到我的个人博客参观一下,估计近几年都会一直更新!和我做个朋友吧!https://motongxue.cn 文章目录 蓝桥杯2015初赛生命之树

  2. 蓝桥杯2015初赛-加法变乘法-枚举

    题目描述 我们都知道:1+2+3+ - + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+-+1011+12+-+2728+29+-+49 = ...

  3. 蓝桥杯2015初赛-星系炸弹-日期计算

    题目描述 在X星系的广袤空间中漂浮着许多X星人造"炸弹",用来作为宇宙中的路标. 每个炸弹都可以设定多少天之后爆炸. 比如:阿尔法炸弹2015年1月1日放置,定时为15天,则它在2 ...

  4. 1251: [蓝桥杯2015初赛]星系炸弹

    时间限制: 1 Sec 内存限制: 256 MB 题目链接:http://oj.ecustacm.cn/problem.php?id=1251 题目描述 在X星系的广袤空间中漂浮着许多X星人造&quo ...

  5. 蓝桥杯2015初赛试题

    目录 方程整数解 [简单] 星系炸弹 [★] 奇妙的数字 [简单] 牌型种数 [★★]有意思 饮料换购 [简单] 奖券数目 [简单] 三羊献瑞 [★] 加法变乘法 [★]有点意思 移动距离 [★★]有 ...

  6. [蓝桥杯2015初赛]移动距离

    题目描述 X星球居民小区的楼房全是一样的,并且按矩阵样式排列. 其楼房的编号为1,2,3- 当排满一行时,从下一行相邻的楼往反方向排号. 比如:当小区排号宽度为6时,开始情形如下: 1 2 3 4 5 ...

  7. [蓝桥杯2015初赛]生命之树-求树的最大子树权值和

    题目描述 在X森林里,上帝创建了生命之树. 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值. 上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都 ...

  8. [蓝桥杯2015初赛]手链样式-思维+next_permutation枚举(好题)

    题目描述 小明有3颗红珊瑚,4颗白珊瑚,5颗黄玛瑙. 他想用它们串成一圈作为手链,送给女朋友. 现在小明想知道:如果考虑手链可以随意转动或翻转,一共有多少不同的组合样式? 输出 请你输出该整数.不要输 ...

  9. 蓝桥杯2015初赛-三羊献瑞-枚举

    题目描述 观察下面的加法算式: 其中,相同的汉字代表相同的数字,不同的汉字代表不同的数字. 请你填写"三羊献瑞"所代表的4位数字(答案唯一),不要填写任何多余内容. 输出 请你填写 ...

最新文章

  1. 吴恩达新课发布1天,引3万人观看 | 完整PPT
  2. bat maven 一键打包 3.0
  3. 职场必读的经典励志故事
  4. 可以获取python整数类型帮助的是什么-PYthon如何把一个字符串类型转换为整数类型?...
  5. 关于Advertising Campaign
  6. PHP空指针,PHP 5.3.7之前版本空指针引用拒绝服务漏洞
  7. 播客#45:迪伦·以色列
  8. 如何在Go中编写防弹代码:不会失败的服务器工作流程
  9. 面试官:重写 equals 时为什么一定要重写 hashCode?
  10. java web中读取properties文件时的路径问题
  11. centos 配置mysql环境变量_Centos7.1部署mysql-5.6.34(笔记)
  12. aes算法c语言实现_C语言实现常用数据结构:Dijkstra最短路径算法(第18篇)
  13. 【我的相册】北方的传统面艺
  14. 图吧主机linux,图吧的日常 篇一百零六:图吧垃圾佬的LINUX体验(UBUNTU)
  15. 网络编程笔记之TCP例子(帅帅老师讲堂)
  16. css文本缩进两个字符,css如何设置首行缩进2个字符
  17. dellr720服务器做系统,DellR720服务器操作系统的安装与重装
  18. CentOS 安装Oracle 11g R2
  19. Jenkins 部署项目出现 Failed to connect to repository : Command git ls-remote -h http://gitlab. 128
  20. 小强ERP:旅游行业的996,还能改变吗?

热门文章

  1. 关于博客园官方博客技术改造升级的启发
  2. 更新TTK失败,请检查网络连接
  3. 奥比中光相机的python采集代码
  4. git: cherry-pick
  5. pdf文件两栏内容提取信息思路
  6. 9、本金10000元存入银行,年利率是千分之三。每过一年,将本金和利息相加作为新的本金。计算五年后,获得的本金是多少?
  7. 荐读 | 分享交易员的书单,向名家请教交易之道,交易精彩无比
  8. c ++内联函数_内联MHTML +数据URI
  9. 拥有一套如何让客户购买的方法?
  10. 微信小程序直播间实现下拉刷新(目前全网最优最美观的方法)