【洛谷】P1357 花园(状压+矩阵快速幂)
题目
传送门:QWQ
分析
因为m很小,考虑把所有状态压成m位二进制数。
那么总状态数小于$ 2^5 $。
如果状态$ i $能转移到$ j $,那么扔进一个矩阵,n次方快速幂一下。
答案是对角线之和,是转移n次后回来的方案数。
代码
1 #include <bits/stdc++.h> 2 typedef long long ll; 3 const int maxn=100; 4 const ll MOD=1000000007; 5 using namespace std; 6 ll tot; int sta[maxn]; 7 struct Matrix{ 8 ll m[maxn][maxn]; 9 Matrix(){memset(m,0,sizeof(m));} 10 }; 11 Matrix operator * (const Matrix& a,const Matrix& b){ 12 Matrix ans; 13 for(int i=0;i<=tot;i++) 14 for(int j=0;j<=tot;j++) 15 for(int k=0;k<=tot;k++) 16 ans.m[i][j]=(ans.m[i][j]+a.m[i][k]*b.m[k][j])%MOD; 17 return ans; 18 } 19 Matrix a,ans,f,tmp; 20 int main(){ 21 ll n,m;int k; 22 cin>>n>>m>>k; 23 tot=(1<<m)-1; 24 for(int i=0;i<=tot;i++){ 25 int num=0,x=i; 26 while(x){ if(x&1)num++; x>>=1; } 27 if(num<=k){ 28 sta[i]=true; 29 a.m[i>>1][i]=1; 30 a.m[(i>>1)+(1<<(m-1))][i]=1; 31 } 32 } 33 34 for(int i=0;i<maxn;i++) tmp.m[i][i]=1; 35 while(n){ 36 if(n&1) tmp=tmp*a; 37 a=a*a; 38 n>>=1; 39 } 40 41 // for(int i=0;i<=tot;i++,puts("")) 42 // for(int j=0;j<=tot;j++) 43 // printf("%5d ",tmp.m[i][j]); 44 ll cnt=0; 45 for(int i=0;i<=tot;i++){ 46 if(sta[i]){ 47 cnt=(cnt+tmp.m[i][i])%MOD; 48 } 49 } 50 cout<<cnt<<endl; 51 return 0; 52 }
转载于:https://www.cnblogs.com/noblex/p/9447731.html
【洛谷】P1357 花园(状压+矩阵快速幂)相关推荐
- 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]
洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 299 Solved: 207 Description 加里敦星球的 ...
- 洛谷P3390 【模板】矩阵快速幂
传送门 从今天开始学习矩阵快速幂.jpg 1 //minamoto 2 #include<iostream> 3 #include<cstdio> 4 #include< ...
- BZOJ 2004 公交线路(状压DP+矩阵快速幂)
注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压. 然后状压DP一下,用矩阵快速幂加速运算即可. #include <stdio.h> #include ...
- 2018.09.28 hdu5434 Peace small elephant(状压dp+矩阵快速幂)
传送门 看到n的范围的时候吓了一跳,然后发现可以矩阵快速幂优化. 我们用类似于状压dp的方法构造(1(1(1<<m)∗(1m)*(1m)∗(1<<m)m)m)大小的矩阵. 然后 ...
- 【Codeforces Gym - 101635C Macarons 】【矩阵快速幂+状压】【dfs时间换空间】
[链接] http://codeforces.com/gym/101635/attachments [题意] 求用1*1,1*2的方格填n*m的矩阵的方法数 [知识点] 状压dfs+矩阵快速幂 [分析 ...
- 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs
http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...
- P1357 花园 (矩阵快速幂+ DP)
题意:一个只含字母C和P的环形串 求长度为n且每m个连续字符不含有超过k个C的方案数 m <= 5 n <= 1e15 题解:用一个m位二进制表示状态 转移很好想 但是这个题是用矩阵快速 ...
- 牛客练习赛27 F-计数(状压+限制初末状态的矩阵快速幂)
传送门 假如不是环,很简单 定义f[i][j]f[i][j]f[i][j]枚举到第iii个数字最后五个数字状态是jjj 那么显然可以矩阵快速幂求解 初始矩阵aaa是111行(1<<m)−1 ...
- 【洛谷P3390】 矩阵快速幂(模板)
贴一下矩阵快速幂的模板 #include<iostream> #include<cstdio> #include<cstring> #include<stri ...
最新文章
- 谈一谈浏览器解析CSS选择器的过程【前端每日一题-6】
- 第十九章 7 Data类
- 分块编码(Transfer-Encoding:chunked)
- linux php扩展 mysqli,[linux]PHP添加mysqli扩展 | 学步园
- 计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决
- 4米乘以12米CAD图_CAD套图技巧大揭秘及坐标问题小结
- AD9如何自定义板子外形,导圆角
- Oracle导入元数据,eova oracle 导入元数据报错
- ureport2使用
- Caml 多表关联查询
- 如何将win7系统的电脑屏幕改成护眼的豆沙绿
- 产品设计 - AARRR模型,增长和变现
- 如何创作属于自己的NFT?
- 2021年塔式起重机司机复审考试及塔式起重机司机考试试题
- jQuery EasyUI详解-EasyUI环境配置
- Gradle - Groovy Language
- 如何添加打印纸规格尺寸?
- 云渲染最全计费规则合集
- 漫反射与高光反射总结
- 入门 | 我们常听说的置信区间与置信度到底是什么?