题目

传送门: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 花园(状压+矩阵快速幂)相关推荐

  1. 洛谷P3758/BZOJ4887 [TJOI2017] 可乐 [矩阵快速幂]

    洛谷传送门,BZOJ传送门 可乐 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 299  Solved: 207 Description 加里敦星球的 ...

  2. 洛谷P3390 【模板】矩阵快速幂

    传送门 从今天开始学习矩阵快速幂.jpg 1 //minamoto 2 #include<iostream> 3 #include<cstdio> 4 #include< ...

  3. BZOJ 2004 公交线路(状压DP+矩阵快速幂)

    注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压. 然后状压DP一下,用矩阵快速幂加速运算即可. #include <stdio.h> #include ...

  4. 2018.09.28 hdu5434 Peace small elephant(状压dp+矩阵快速幂)

    传送门 看到n的范围的时候吓了一跳,然后发现可以矩阵快速幂优化. 我们用类似于状压dp的方法构造(1(1(1<<m)∗(1m)*(1m)∗(1<<m)m)m)大小的矩阵. 然后 ...

  5. 【Codeforces Gym - 101635C Macarons 】【矩阵快速幂+状压】【dfs时间换空间】

    [链接] http://codeforces.com/gym/101635/attachments [题意] 求用1*1,1*2的方格填n*m的矩阵的方法数 [知识点] 状压dfs+矩阵快速幂 [分析 ...

  6. 第九届河南省赛 宣传墙 //状压dp+矩阵快速幂+dfs

    http://nyoj.top/problem/1273 状压dp+矩阵快速幂+dfs 1273-宣传墙 内存限制:64MB 时间限制:1000ms 特判: No 通过数:19 提交数:64 难度:4 ...

  7. P1357 花园 (矩阵快速幂+ DP)

    题意:一个只含字母C和P的环形串 求长度为n且每m个连续字符不含有超过k个C的方案数 m <= 5  n <= 1e15 题解:用一个m位二进制表示状态 转移很好想 但是这个题是用矩阵快速 ...

  8. 牛客练习赛27 F-计数(状压+限制初末状态的矩阵快速幂)

    传送门 假如不是环,很简单 定义f[i][j]f[i][j]f[i][j]枚举到第iii个数字最后五个数字状态是jjj 那么显然可以矩阵快速幂求解 初始矩阵aaa是111行(1<<m)−1 ...

  9. 【洛谷P3390】 矩阵快速幂(模板)

    贴一下矩阵快速幂的模板 #include<iostream> #include<cstdio> #include<cstring> #include<stri ...

最新文章

  1. 谈一谈浏览器解析CSS选择器的过程【前端每日一题-6】
  2. 第十九章 7 Data类
  3. 分块编码(Transfer-Encoding:chunked)
  4. linux php扩展 mysqli,[linux]PHP添加mysqli扩展 | 学步园
  5. 计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决
  6. 4米乘以12米CAD图_CAD套图技巧大揭秘及坐标问题小结
  7. AD9如何自定义板子外形,导圆角
  8. Oracle导入元数据,eova oracle 导入元数据报错
  9. ureport2使用
  10. Caml 多表关联查询
  11. 如何将win7系统的电脑屏幕改成护眼的豆沙绿
  12. 产品设计 - AARRR模型,增长和变现
  13. 如何创作属于自己的NFT?
  14. 2021年塔式起重机司机复审考试及塔式起重机司机考试试题
  15. jQuery EasyUI详解-EasyUI环境配置
  16. Gradle - Groovy Language
  17. 如何添加打印纸规格尺寸?
  18. 云渲染最全计费规则合集
  19. 漫反射与高光反射总结
  20. 入门 | 我们常听说的置信区间与置信度到底是什么?

热门文章

  1. qq语音按住ctrl就静音怎么解决_绝地求生大逃杀:语音故障的解决办法
  2. iCloud 是什么
  3. 在微信上如何查看2个人之间所有的红包转账记录,请注意是所有的?
  4. 退休后多长时间能领到工资?
  5. 如何更好地理解孩子?
  6. 有幸和一位企业家聊天,他白手起家
  7. Ubuntu快速配置指南
  8. mysql交互式查询_客户机程序5―MYSQL交互式查询程序[图]_MySQL
  9. Kafka配置文件及解释
  10. Win+Tab键实现自定义程序列表间的窗口切换