不得不说本蒻做这个题目的时候内心是很蒙蔽的qwq

推了规律找错了结果还没有暴力的分数高qwq......

开数组\(f[i][j]\)来记录前i个花圃,(这里运用到状压的思想)其中最近的m个的状态(二进制,1表示C,0表示P),然后因为这个状态是可以递推下一个状态的(比如说1m到2m+1),然后我们发现每一次的状态转移都可以用同一个矩阵实现,那么该题目就可以用矩阵快速幂来加速计算。因为题目中是一个环状,那么转换n次一定还是原先的状态。那么题目就转换成了一个合法状态(这个需要预先判断出来)转移n次到自己的方案数量qwq。f数组的第一维也不需要了,那么直接\(f[j]\)乘以矩阵的n次方依次累加就是答案数量了qwq

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int M=5,p=1000000007;
long long n,m,k,ans=0;
long long f[1<<M],a[1<<M][1<<M];
int MAX,cnt;
bool pd[1<<M];
inline void mulself(long long a[1<<M][1<<M]) {
long long c[1<<M][1<<M];
memset(c,0,sizeof(c));
for(int i=0;i<MAX;++i)
for(int j=0;j<MAX;++j)
for(int k=0;k<MAX;++k)
c[i][j]=(c[i][j]+a[i][k]*a[k][j])%p;
memcpy(a,c,sizeof(c));
}
inline void mul(long long f[1<<M],long long a[1<<M][1<<M])
{
long long c[1<<M];
memset(c,0,sizeof c);
for(int j=0;j<MAX;++j)
for(int k=0;k<MAX;++k)
c[j]=(c[j]+f[k]*a[k][j])%p;
memcpy(f,c,sizeof(c));
}
//以上是矩阵乘法的内容
int main() {
scanf("%lld%lld%lld",&n,&m,&k);
MAX=1<<m;
//最大的情况统计
for(int i=0;i<MAX;++i) {
cnt=0;
for(int j=0;j<m;++j)
if(i&1<<j)++cnt;
if(cnt<=k) pd[i]=true;
//记录合法方案
}
for(int i = 0; i < MAX; ++i)
if(pd[i]) //这个是合法状态
{
memset(f,0,sizeof(f));
f[i]=1;//初始化该状态的方案数为1
memset(a,0,sizeof(a));
for(int j=0;j<MAX;++j) //搜寻转移的下一个状态
if(pd[j])//如果这个状态合法
a[j>>1][j]=1,a[(j>>1)+(1<<(m-1))][j]=1;//记录状态之间转移是合法的
//进行矩阵快速幂加速运算
for(long long y=n;y;y>>=1,mulself(a))
if(y&1)
mul(f,a);
ans=(ans+f[i])%p;//统计答案
}
printf("%lld\n", ans);
return 0;
}

luogu1357花园(矩阵运算)(状压DP)的更多相关文章

  1. nyoj1273 河南省第九届省赛_"宣传墙"、状压DP+矩阵幂加速

    宣传墙 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...

  2. QDUOJ 来自xjy的签到题(bfs+状压dp)

    来自xjy的签到题   Description 爱丽丝冒险来到了红皇后一个n*n大小的花园,每个格子由'.'或'#'表示,'.'表示爱丽丝可以到达这个格子,‘#’表示爱丽丝不能到达这个格子,爱丽丝每1 ...

  3. 状压DP复习笔记

    前言 复习笔记第4篇.CSP RP++. 引用部分为总结性内容. 0--P1433 吃奶酪 题目链接 luogu 题意 房间里放着 \(n\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...

  4. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  5. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  6. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  7. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  8. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  9. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  10. HDU 1074 Doing Homework (状压dp)

    题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...

随机推荐

  1. 字符编码 ASCII,Unicode和UTF-8的关系

    转自:http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143166410626 ...

  2. 关于junit包导入不了但是maven本地库中却存在的问题

    导入项目的时候发现junit的类使用不了,于是就去看看包导入了没有 发现包是灰色的,于是猜想可能是maven本地库中包没下载过来 查询了本地库发现包是存在的,这就奇怪的,经过网上查询之后得到解决方案 ...

  3. AspectJ的通知类型

  4. 面试-Android之java基础

    1.HashMap是否为线程安全. 不安全的. 2.int[] a ={1,2,3,4}; int[]b =a ; b[0]=3; a[0]的值是改变的. 3.组合模式 安卓listview的不同ce ...

  5. shiro 集成spring 配置 学习记录(一)

    首先当然是项目中需要增加shiro的架包依赖: <!-- shiro --> <dependency> <groupId>org.apache.shiro</ ...

  6. 面向对象的JavaScript-003

    1. // Since JavaScript doesn't exactly have sub-class objects, prototype is a useful workaround to m ...

  7. A*搜索 概念

    启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提到了效率.在启发式搜索中,对位置的估价是十分重要 ...

  8. mysql-day01

    Microsoft Windows [版本 10.0.17134.648](c) 2018 Microsoft Corporation.保留所有权利. C:\Users\lijun>java用法 ...

  9. 不设置环境变量 直接启动tomcat

    window: 设置 startup.bat set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_144set JRE_HOME=C:\Program Files ...

  10. Redis与Java的链接Jedis(二)

    就像jdbc跟java链接数据库一样 redis跟java链接最好的工具就是Jedis 相关资源下载:https://github.com/xetorthio/jedis 正常建立java项目, 导入 ...