P1357 花园(dp&快速幂转移)

考虑nnn较小时的dpdpdp:dp[i][j]=dp[i−1][j>>1]+dp[i−1][j>>1∣(1<<(m−1))]dp[i][j]=dp[i-1][j>>1]+dp[i-1][j>>1|(1<<(m-1))]dp[i][j]=dp[i−1][j>>1]+dp[i−1][j>>1∣(1<<(m−1))]

需要注意对应的二维状态合法。

因为n≤1015n\le 10^{15}n≤1015,所以考虑快速幂转移。

如果状态xxx能转移到状态yyy所以a[x][y]=1a[x][y]=1a[x][y]=1。

然后自乘nnn次得到的∑i=02m−1a[i][i]\sum\limits_{i=0}^{2^m-1} a[i][i]i=0∑2m−1​a[i][i]就是答案。

因为是个环,所以我们只对初态和末态相等的答案统计。

时间复杂度:O(m3logn+2m)O(m^3logn+2^m)O(m3logn+2m)

注意整数溢出。

// Problem: P1357 花园
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1357
// Memory Limit: 125 MB
// Time Limit: 1000 ms
// Date: 2021-04-23 21:01:22
// --------by Herio--------#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int N=1e3+5,M=2e4+5,inf=0x3f3f3f3f,mod=1e9+7;
#define mst(a,b) memset(a,b,sizeof a)
#define PII pair<int,int>
#define fi first
#define se second
#define pb emplace_back
#define SZ(a) (int)a.size()
#define IOS ios::sync_with_stdio(false),cin.tie(0)
void Print(int *a,int n){for(int i=1;i<n;i++)printf("%d ",a[i]);printf("%d\n",a[n]);
}
ll n;
int m,k;
int f[1<<5][1<<5];
struct mtx{int a[1<<5][1<<5];int r,c;mtx(int rr,int cc,int p=0){r=rr,c=cc;mst(a,0);if(p==1) for(int i=0;i<rr;i++) a[i][i]=1;}mtx operator *(const mtx &b)const{mtx m(r,b.c);for(int i=0;i<r;i++)for(int j=0;j<m.c;j++)for(int k=0;k<c;k++)m.a[i][j]=(m.a[i][j]+1LL*a[i][k]*b.a[k][j])%mod;return m;}mtx operator ^(ll n)const{mtx ans(r,c,1),x=*this;while(n){if(n&1) ans=ans*x;x=x*x;n>>=1;}return ans;}
};
void solve(){scanf("%lld%d%d",&n,&m,&k);int st=1<<m;mtx ans(st,st);for(int i=0;i<st;i++){if(__builtin_popcount(i)>k)  continue;int j=i>>1;ans.a[j][i]=1;j|=1<<m-1;if(__builtin_popcount(j)<=k) ans.a[j][i]=1;}ans=ans^n;int res=0;for(int i=0;i<st;i++) res=(res+ans.a[i][i])%mod;printf("%d\n",res);//think twice code once
}
int main(){solve();return 0;
}

P1357 花园(dp快速幂转移)相关推荐

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

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

  2. 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法

    题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...

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

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

  4. NOIP模拟题 2016.11.15 [LIS] [spfa] [同余最短路] [矩阵快速幂] [容斥原理] [数学]

    小L的二叉树 [题目描述] 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣. 所以,小L当时卡在了二叉树. 在计算机科学中,二叉树是每个结点最多有两个 ...

  5. 【洛谷】P1357 花园(状压+矩阵快速幂)

    题目 传送门:QWQ 分析 因为m很小,考虑把所有状态压成m位二进制数. 那么总状态数小于$ 2^5 $. 如果状态$ i $能转移到$ j $,那么扔进一个矩阵,n次方快速幂一下. 答案是对角线之和 ...

  6. [选拔赛1]花园(矩阵快速幂),JM的月亮神树(最短路),保护出题人(斜率优化)

    多年不考试,一夜回到解放前 T1:花园 title solution code T2:月亮神树 title solution code T3:保护出题人 title solution code T1: ...

  7. HDU5863 cjj's string game(DP + 矩阵快速幂)

    题目 Source http://acm.split.hdu.edu.cn/showproblem.php?pid=5863 Description cjj has k kinds of charac ...

  8. AtCoder AGC019E Shuffle and Swap (DP、FFT、多项式求逆、多项式快速幂)

    题目链接 https://atcoder.jp/contests/agc019/tasks/agc019_e 题解 tourist的神仙E题啊做不来做不来--这题我好像想歪了啊= =-- 首先我们可以 ...

  9. 2021HDU多校8 - 7057 Buying Snacks(矩阵快速幂套NTT优化dp)

    题目链接:点击查看 题目大意:给出 nnn 种糖果,每种糖果有大小包装之分,有三种购买方案,价钱分别如下: 单独购买一个小的,花费一块钱 单独购买一个大的,花费两块钱 ∀i>1\forall i ...

  10. POj 3420 Quad Tiling 状态压缩DP+递推+矩阵快速幂

    哈哈,写了好久的,总算对了. 接下来介绍两种思路: 先介绍一种   递推+矩阵的快速幂的方法 一种DP的思想考虑4×n的最后一列  ,可以放的方法一共有5种 1.放4个 1×2  则 为dp[n-2] ...

最新文章

  1. Windows Server 2008 R2 Beta VHD镜像文件发布
  2. 脑电分析系列[MNE-Python-10]| 信号空间投影SSP数学原理
  3. K8s 学习者绝对不能错过的最全知识图谱(内含 58个知识点链接)
  4. Robust principal component analysis?(RPCA简单理解)
  5. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 9丨有趣的电影【难度简单】
  6. C语言(CED)最长公共子序列----动态规划第一题
  7. 【今日CV 计算机视觉论文速览 第136期】Wed, 26 Jun 2019
  8. c语言ntc程序,NTC热敏电阻测温度 单片机C和汇编源程序
  9. linux扫描目标主机开放端口
  10. python骗局-如何识破python小课骗局_怎样选择学校呢
  11. 学生签到系统c代码_c语言学生签到
  12. HCIA物联网初级考试-第二章物联网常用的通信技术
  13. 拉勾网positionAjax获取的时候(带有账号登陆的时候)频繁获取被拉黑
  14. Android(root)设备HTTPS请求时间校准
  15. Xcode 报错 ERROR ITMS-90096,启动图黑屏
  16. 杭电计算机组成原理实验RISC-V 实验 取指令及指令译码实验
  17. 52单片机四种方法实现流水灯
  18. UML图之五——时序图
  19. 1085: [SCOI2005]骑士精神
  20. 杭电ACM2026题

热门文章

  1. TestCenter测试管理工具功能详解二(G)
  2. UVA - 12304 2D Geometry 110 in 1!
  3. 2、孟子·公孙丑上 孟子·公孙丑下
  4. LDA变分法和采样法
  5. BZOJ4466 [Jsoi2013]超立方体
  6. 操作系统1-6章作业
  7. GDK动态代理原理分析
  8. OLS最小二乘法回归模型
  9. 答疑解惑 | 关于PMBOK第七版,常见问题合集【附电子版】
  10. 解决win7 下面 利用docker搭建jitsi-meet测试环境局域网无法访问的问题