题目

传送门:QWQ

分析

因为m很小,考虑把所有状态压成m位二进制数。

那么总状态数小于$ 2^5 $。

如果状态$ i $能转移到$ j $,那么扔进一个矩阵,n次方快速幂一下。

答案是对角线之和,是转移n次后回来的方案数。

代码

 #include <bits/stdc++.h>
typedef long long ll;
const int maxn=;
const ll MOD=;
using namespace std;
ll tot; int sta[maxn];
struct Matrix{
ll m[maxn][maxn];
Matrix(){memset(m,,sizeof(m));}
};
Matrix operator * (const Matrix& a,const Matrix& b){
Matrix ans;
for(int i=;i<=tot;i++)
for(int j=;j<=tot;j++)
for(int k=;k<=tot;k++)
ans.m[i][j]=(ans.m[i][j]+a.m[i][k]*b.m[k][j])%MOD;
return ans;
}
Matrix a,ans,f,tmp;
int main(){
ll n,m;int k;
cin>>n>>m>>k;
tot=(<<m)-;
for(int i=;i<=tot;i++){
int num=,x=i;
while(x){ if(x&)num++; x>>=; }
if(num<=k){
sta[i]=true;
a.m[i>>][i]=;
a.m[(i>>)+(<<(m-))][i]=;
}
} for(int i=;i<maxn;i++) tmp.m[i][i]=;
while(n){
if(n&) tmp=tmp*a;
a=a*a;
n>>=;
} // for(int i=0;i<=tot;i++,puts(""))
// for(int j=0;j<=tot;j++)
// printf("%5d ",tmp.m[i][j]);
ll cnt=;
for(int i=;i<=tot;i++){
if(sta[i]){
cnt=(cnt+tmp.m[i][i])%MOD;
}
}
cout<<cnt<<endl;
return ;
}

【洛谷】P1357 花园(状压+矩阵快速幂)的更多相关文章

  1. P1357 花园 状压 矩阵快速幂

    题意 小L有一座环形花园,沿花园的顺时针方向,他把各个花圃编号为1~N(2<=N<=10^15).他的环形花园每天都会换一个新花样,但他的花园都不外乎一个规则,任意相邻M(2<=M& ...

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

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

  3. 洛谷P3390【模板】矩阵快速幂——矩阵运算入门笔记

    作为一个因为极度畏惧数学 而选择成为一名OIer的蒟蒻 终于还是迎来了要面对的这一天 一般题目中矩阵运算好像只用到矩阵乘法 (或许只是蒟蒻我做的题太少) 而且矩阵的乘法也是较难理解的一部分 所以就简单 ...

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

    给定n*n的矩阵A,求A^k 行列都是n #include <iostream> #include <cstdio> #include <cstring> #inc ...

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

    这题的确是个模板 但也要提到有关矩乘的内容: 首先什么是矩阵? 给一个线性变换 F(x)   (她可能就是个函数,定义域为向量集) 她可以把一个N维向量变成M维 那么显然x的每一维都可能影响着F(x) ...

  6. 题解——洛谷P3390 【模板】矩阵快速幂(矩阵乘法)

    模板题 留个档 #include <cstdio> #include <algorithm> #include <cstring> #define int long ...

  7. 题解:洛谷P1357 花园

    题解:洛谷P1357 花园 Description 小 L 有一座环形花园,沿花园的顺时针方向,他把各个花圃编号为 \(1∼n\).花园 \(1\) 和 \(n\) 是相邻的. 他的环形花园每天都会换 ...

  8. 洛谷 P1357 花园 解题报告

    P1357 花园 题目描述 小\(L\)有一座环形花园,沿花园的顺时针方向,他把各个花圃编号为\(1~N(2<=N<=10^{15})\).他的环形花园每天都会换一个新花样,但他的花园都不 ...

  9. [洛谷P1357] 花园

    题目类型:状压\(DP\) -> 矩阵乘法 绝妙然而思维难度极其大的一道好题! 传送门:>Here< 题意:有一个环形花圃,可以种两种花:0或1. 要求任意相邻的\(M\)个花中1的 ...

随机推荐

  1. Python decode和encody

    s = "我今天非常的困" bs = s.encode("utf-8")# 把字符串转化成utf-8格式bytes # bytes 不是给人看的, 给机器用的 ...

  2. Boosting学习笔记(Adboost、GBDT、Xgboost)

    转载请注明出处:http://www.cnblogs.com/willnote/p/6801496.html 前言 本文为学习boosting时整理的笔记,全文主要包括以下几个部分: 对集成学习进行了 ...

  3. 编译libmad库

    libmad是一个开源的音频解码库,下面说说关于这个库工程的编译过程: 1.首先从网上下载libmad开源库,自己百度就能够找到关于这个库的下载链接地址,我这里提供一个: http://downloa ...

  4. test20181005 迷宫

    题意 分析 时间复杂度里的n,m写反了. 出题人很有举一反三的精神. 代码 我的代码常数巨大,加了各种优化后开O3最慢点都要0.9s. #include<cstdlib> #include ...

  5. map和jsonObject 这2中数据结构之间转换

    前台写json直接是:var array = [ ] ; 调用方法:array[index],若是对象,再[“key”] var obj = {''a'':123 , "b":&q ...

  6. ansible copy file

    ansible xxxip  -m copy -a 'src=/localdir/file  dest=/sss/xxx/basic_search/bin/'

  7. day26 python学习 对象的接口,封装,私用属性 property

    # 抽象类和接口类 #** #不崇尚接口类 #python本身支持多继承,没有接口专用的语法.但是我知道接口的概念 # 接口类:# 是规范子类的一个模板,只要接口类中定义的,就应该在子类中实现# 接口 ...

  8. 12 Factor CLI Apps

    CLIs are a fantastic way to build products. Unlike web applications, they take a small fraction of t ...

  9. Oracle C#处理时间类型的Insert

    首先如果直接   parm.Value=DateTime.Now;   insert into table (TheTime)Value(@parm);   执行sql就会报错 ----------- ...

  10. 使用VI编辑器在Linux下编写Java文件

    1.cd 文件名称.进入一个文件夹下 2.vi 文件名称,新建一个文件(如此文件已存在则打开) watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWlfc3N ...