luogu1357花园(矩阵运算)(状压DP)
不得不说本蒻做这个题目的时候内心是很蒙蔽的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)的更多相关文章
- nyoj1273 河南省第九届省赛_"宣传墙"、状压DP+矩阵幂加速
宣传墙 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 ALPHA 小镇风景美丽,道路整齐,干净,到此旅游的游客特别多.CBA 镇长准备在一条道路南 面 4*N 的墙上做 ...
- QDUOJ 来自xjy的签到题(bfs+状压dp)
来自xjy的签到题 Description 爱丽丝冒险来到了红皇后一个n*n大小的花园,每个格子由'.'或'#'表示,'.'表示爱丽丝可以到达这个格子,‘#’表示爱丽丝不能到达这个格子,爱丽丝每1 ...
- 状压DP复习笔记
前言 复习笔记第4篇.CSP RP++. 引用部分为总结性内容. 0--P1433 吃奶酪 题目链接 luogu 题意 房间里放着 \(n\) 块奶酪,要把它们都吃掉,问至少要跑多少距离?一开始在 \ ...
- BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
- nefu1109 游戏争霸赛(状压dp)
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
- poj3311 TSP经典状压dp(Traveling Saleman Problem)
题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...
- [NOIP2016]愤怒的小鸟 D2 T3 状压DP
[NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...
- 【BZOJ2073】[POI2004]PRZ 状压DP
[BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...
- bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...
- HDU 1074 Doing Homework (状压dp)
题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...
随机推荐
- Elasticsearch-2.4.3的3节点安装(多种方式图文详解)(含 head、kopf、marvel、shield和watcher插件安装和使用)
前提: Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) 我这里,以192.168.80.10(HadoopMaster ...
- 当一个项目中同时存在webroot和webcontext时
当一个项目中同时存在webroot和webcontext时,注意一定要删除那些没在使用的.还有要发布其中一个想要的目录到服务器中,具体方法是 选择相应工程-----properties-----de ...
- XX公司的CA,与平台融合解决方法。。。。。
1,jsp 的编写要求 <script language="javascript" type="text/javascript"> var clie ...
- CBCentralManagerDelegate Protocol 委托协议相关分析
总体概述 CBCentralManagerDelegate 协议中定义了一系列方法列表,这些方法是委托对象必须要实现的方法(也有可选择的),当中央管理器的相应变化就会调用委托对象中实现的相应方法. M ...
- windows版mongodb不知道安装在哪儿
情景还原: 从官网:点击打开链接 下载了 MongoDB-win32-x86_64-2.6.12-signed.msi文件后, 右键安装,各种Next后,没有选择路径,就安装结束了!! 任务管理器里面 ...
- js闭包的定义
通过函数字面量创建的函数对象包含一个连接到外部上下文的连接,这叫做闭包. 还有一种定义:函数可以访问它被创建时所处的上下文环境,叫做闭包.
- 一张图片优化5k带来的带宽成本及其前端页面的优化方法
上周,我参加了公司的一门课程<网站性能优化>,讲师提出了一个问题:一张图片优化后减少5K,1年内可以大概省下多少宽带成本呢?非常好奇,仔细听完讲师分析,计算出来的数据让小伙伴们都惊呆了,仅 ...
- 各种mac软件地址
http://www.sdifenzhou.com/ 各种软件地址
- 657. Judge Route Circle机器人能否返回
[抄题]: Initially, there is a Robot at position (0, 0). Given a sequence of its moves, judge if this r ...
- 解决VirtualBox 上的XP 关机时重启 , 启动时蓝屏 ,点击电源选项蓝屏
三个问题一次性解决. 启动时的蓝屏显示错误信息是: STOP 0x000000CE (...) DRIVER_UNLOADED_WITHOUT_CANCELLING_PENDING_OPERATION ...