bzoj2004(矩阵快速幂,状压DP)
每个长度为p的区间都必须出现k次1,数据又很小,我们使用状压。
dp[i][j]->dp[i+1][j'],dp[i][j]表示当前考虑到了第i个车站,包括第i个其后的p个的状态(有车停或没车停),其中j'为j中某一个车动一次到达的状态,为了防止复杂度爆炸,先dfs求一遍有用的状态。
然后矩阵转移。。
另外提一下初末状态,注意到起始站的限制,初末状态都应是p个里前k个都是1。(在代码实现中就正好对应了第一个dfs的状态)
这也是开始B.t[1][1]赋值1和最后输出B.t[1][1]的原因
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=,mod=;
struct matr{
int t[maxn][maxn],n,m;
matr operator*(matr &a){
matr c;
for(int i=;i<=n;++i)
for(int j=;j<=a.m;++j){
c.t[i][j]=;
for(int k=;k<=n;++k)
c.t[i][j]=(c.t[i][j]+t[i][k]*a.t[k][j])%mod;
}
c.n=n;c.m=a.m;
return c;
}
}A,B;
int n,k,p,q[maxn];
void dfs(int pos,int num,int cnt){
if(cnt==k){q[++q[]]=num;return;}
for(int i=pos-;i>=;--i)
dfs(i,num+(<<i),cnt+);
}
int check(int x,int y){
int tmp=x-(<<(p-));
tmp<<=;tmp^=y;
if(tmp==(tmp&(-tmp)))return ;
return ;
}
int main(){
cin>>n>>k>>p;
dfs(p-,(<<(p-)),);
A.n=A.m=B.n=B.m=q[];
for(int i=;i<=q[];++i)B.t[i][i]=;
for(int i=;i<=q[];++i)
for(int j=;j<=q[];++j){
if(check(q[i],q[j]))A.t[i][j]=;
}
/*for(int i=1;i<=q[0];++i){
for(int j=1;j<=q[0];++j)
cout<<A.t[i][j]<<' ';
cout<<endl;
}*/
int cc=n-k;
while(cc){
if(cc&)B=B*A;
cc>>=;A=A*A;
}
cout<<B.t[][]<<endl;
//system("pause");
return ;
}
bzoj2004(矩阵快速幂,状压DP)的更多相关文章
- bzoj2004 [Hnoi2010]Bus 公交线路 矩阵快速幂+状压DP
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=2004 题解 如果 \(N\) 没有那么大,考虑把每一位分配给每一辆车. 假设已经分配到了第 \ ...
- hihoCoder#1743:K-偏差排列(矩阵快速幂+状压dp)
题意 如果一个 \(1\to N\) 的排列 \(P=[P_1, P_2, ... P_N]\) 中的任意元素 \(P_i\) 都满足 \(|P_i-i| ≤ K\) ,我们就称 \(P\) 是 \( ...
- Codeforces Round #554 (Div. 2) F2. Neko Rules the Catniverse (Large Version) (矩阵快速幂 状压DP)
题意 有nnn个点,每个点只能走到编号在[1,min(n+m,1)][1,min(n+m,1)][1,min(n+m,1)]范围内的点.求路径长度恰好为kkk的简单路径(一个点最多走一次)数. 1≤n ...
- bzoj2004 矩阵快速幂优化状压dp
https://www.lydsy.com/JudgeOnline/problem.php?id=2004 以前只会状压dp和矩阵快速幂dp,没想到一道题还能组合起来一起用,算法竞赛真是奥妙重重 小Z ...
- POJ 3744 【矩阵快速幂优化 概率DP】
搞懂了什么是矩阵快速幂优化.... 这道题的重点不是DP. /* 题意: 小明要走某条路,按照个人兴致,向前走一步的概率是p,向前跳两步的概率是1-p,但是地上有地雷,给了地雷的x坐标,(一维),求小 ...
- 【BZOJ5010】【FJOI2017】矩阵填数 [状压DP]
矩阵填数 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个 h*w 的矩阵,矩阵的行 ...
- poj 3744 Scout YYF I (矩阵快速幂 优化 概率dp)
题目链接 分析&&题意来自 : http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710586.html 题意: 在一条不满地雷的 ...
- 一本通 1783 矩阵填数 状压dp 容斥 计数
LINK:矩阵填数 刚看到题目的时候感觉是无从下手的. 可以看到有n<=2的点 两个矩形. 如果只有一个矩形 矩形外的方案数容易计算考虑 矩形内的 必须要存在x这个最大值 且所有值<=x. ...
- hdu 5564 Clarke and digits 矩阵快速幂优化数位dp
Clarke and digits Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others ...
随机推荐
- tiny4412SDK 1312B 启动ubuntuDsektop
1,解压光盘所带文件ubuntu-desktop-sdcard-image-YYYYMMDD.tar.gz , 得到ubuntudesktop-8g.raw 2,先用SD-flash刷写一边B盘ima ...
- c# 策略模式 加工厂模式-对象与行为分离
计算器程序 策略模式是一种行为学模式.行为是同等级的算法 ,这些行为每个模式封装到一个类里 上端提供数据 ,下端提供算法 ,中间层context context 把上端的数据和算法 放到co ...
- Junit4知识梳理
一.junit官网 junit4:http://junit.org/junit4/ junit5:http://junit.org/junit5/ 二.github junit4: https://g ...
- spring MVC中Dubbo的配置
1.服务提供方的bubbo配置: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=& ...
- hisat2+stringtie+ballgown
hisat2+stringtie+ballgown Posted on 2016年11月25日 早在去年九月,我就写个博文说 RNA-seq流程需要进化啦!http://www.bio-info-tr ...
- sqrt函数倒数计算新对比
某人发表说 雷神之锤 里面有一个 1/sqrt(x) 的函数非常了不起. 但经过实测,发现现在计算机已经优化, 该算法已经没有优势. 具体看文档: <a href="http://fi ...
- rm命令删除文件时排除特定文件
删除文件时排除特定文件 www.python tab.com/html/2013/linuxkaiyuan_0205/214.html 删除当前目录下所有 *.txt文件,除了test.txt 1 ...
- 在 Anaconda下解决国内安装tensorflow等下载慢和中断,出错,异常问题的一点思路
把镜像地址改为清华大学开源软件镜像站,打开 管理员身份打开cmd 输入conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/ ...
- flask框架基础
一 web的一些框架介绍 Flask:短小精悍,内部没有包含多少组件,但是第三方的组件是非常丰富的. Django:django是一个重武器,内部包含了非常多的组件:orm,form,modelFor ...
- 2018.12.12 codeforces 938E. Max History(组合数学)
传送门 唉最开始居然把题给看错了. 其实是组合数学傻逼题呢. 题意简述:给出一个数列,定义一个与数列有关的fff函数,fff函数定义如下: 首先f=0,M=1f=0,M=1f=0,M=1,一直重复如下 ...