BZOJ 2004 公交线路(状压DP+矩阵快速幂)
注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压。
然后状压DP一下,用矩阵快速幂加速运算即可。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm> #define MAXN 140
#define MOD 30031 using namespace std; struct Matrix
{
int num[MAXN][MAXN];
int n,m; //n*m大小矩阵
void setOne(int a,int b)
{
n=a,m=b;
for(int i=;i<=min(n,m);i++) num[i][i]=;
}
Matrix() { memset(num,,sizeof(num)); }
}T,A,one; Matrix operator*(Matrix a,Matrix b)
{
Matrix c;
c.n=a.n,c.m=b.m;
for(int i=;i<=c.n;i++)
for(int j=;j<=c.m;j++)
for(int k=;k<=a.m;k++)
c.num[i][j]=(c.num[i][j]+a.num[i][k]*b.num[k][j])%MOD;
return c;
} Matrix fastPow(Matrix base,int pow)
{
Matrix ans;
ans.setOne(base.n,base.m);
while(pow)
{
if(pow&) ans=ans*base;
base=base*base;
pow>>=;
}
return ans;
} int calc(int x) //计算x的二进制中1的个数
{
int sum=;
while(x)
{
sum++;
x-=x&(-x); //x去掉最后一个1
}
return sum;
} int n,k,p,goal; //goal是目标状态 bool canConvert(int to,int from) //检查状态from能否一步转移到状态to
{
from=(from-(<<(p-)))<<; //这一步相当于把from向左推了一位,个位用0补齐
int tmp=from^to; //tmp应该只有一个1
if(tmp==(tmp&(-tmp))) return true; //tmp只有一个1,则是合法的
return false; //否则是不合法的
} int status[MAXN],top=; //保存所有DP过程中可能出现的状态的栈 int main()
{
scanf("%d%d%d",&n,&k,&p);
for(int S=(<<(p-));S<(<<p);S++) //枚举DP状态S,S是合法状态当且仅当S的二进制中1的个数恰好为k
{
if(calc(S)==k)
{
status[++top]=S;
if(S==(<<p)--((<<(p-k))-)) goal=top; //S是最终要达到的状态
}
}
for(int i=;i<=top;i++)
for(int j=;j<=top;j++)
if(canConvert(status[i],status[j]))
T.num[i][j]=;
A.n=A.m=T.n=T.m=top;
A.num[][goal]=;
T=fastPow(T,n-k);
A=A*T;
printf("%d\n",A.num[][goal]);
return ;
}
BZOJ 2004 公交线路(状压DP+矩阵快速幂)的更多相关文章
- 【BZOJ】2004: [Hnoi2010]Bus 公交线路 状压DP+矩阵快速幂
[题意]n个点等距排列在长度为n-1的直线上,初始点1~k都有一辆公车,每辆公车都需要一些停靠点,每个点至多只能被一辆公车停靠,且每辆公车相邻两个停靠点的距离至多为p,所有公车最后会停在n-k+1~n ...
- BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )
状压dp, 然后转移都是一样的, 矩阵乘法+快速幂就行啦. O(logN*2^(3m)) ------------------------------------------------------- ...
- HDU 5434 Peace small elephant 状压dp+矩阵快速幂
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5434 Peace small elephant Accepts: 38 Submissions: ...
- 【bzoj2004】[Hnoi2010]Bus 公交线路 状压dp+矩阵乘法
题目描述 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决定按下述规则设计 ...
- 『公交线路 状压dp 矩阵乘法加速』
公交线路 Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1km. 作为公交车线路的规划者,小Z调查了市民的 ...
- [Bzoj2004][Hnoi2010]Bus 公交线路(状压dp&&矩阵加速)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2004 看了很多大佬的博客才理解了这道题,菜到安详QAQ 在不考虑优化的情况下,先推$dp ...
- BZOJ2004 HNOI2010公交线路(状压dp+矩阵快速幂)
由数据范围容易想到矩阵快速幂和状压. 显然若要满足一辆公交车的相邻站台差不超过p,则每相邻p个站台中每辆车至少经过一个站台.可以发现这既是必要的,也是充分的. 开始的时候所有车是相邻的.考虑每次把一辆 ...
- 【XSY2524】唯一神 状压DP 矩阵快速幂 FFT
题目大意 给你一个网格,每个格子有概率是\(1\)或是\(0\).告诉你每个点是\(0\)的概率,求\(1\)的连通块个数\(\bmod d=0\)的概率. 最开始所有格子的概率相等.有\(q\)次修 ...
- 2018.09.28 hdu5434 Peace small elephant(状压dp+矩阵快速幂)
传送门 看到n的范围的时候吓了一跳,然后发现可以矩阵快速幂优化. 我们用类似于状压dp的方法构造(1(1(1<<m)∗(1m)*(1m)∗(1<<m)m)m)大小的矩阵. 然后 ...
随机推荐
- 20155313 2016-2017-2 《Java程序设计》第四周学习总结
20155313 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 6 继承与多态 面对对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就 ...
- 为什么说private方法是有罪的
具体的这句话从什么地方获得,我已经无从考证了,但是想想我们现在使用private的场景,你慢慢的就会发现,private的方法,大多数都是copy代码,当然我只是说大多数,还有就是大多数private ...
- 4709: [Jsoi2011]柠檬
4709: [Jsoi2011]柠檬 https://www.lydsy.com/JudgeOnline/problem.php?id=4709 分析: 决策单调性+栈+二分. 首先挖掘性质:每个段选 ...
- 让div跟着鼠标移动
朋友求助帖 具体实现代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- Maven学习(九)-----定制库到Maven本地资源库
这里有2个案例,需要手动发出Maven命令包括一个 jar 到 Maven 的本地资源库. 要使用的 jar 不存在于 Maven 的中心储存库中. 您创建了一个自定义的 jar ,而另一个 Mave ...
- python全栈开发-面向对象-初识2
python_17_day 今日主要内容: 1.类空间,对象空间,查询顺序. 2.组合. 1.类空间,对象空间,查询顺序. class Person: animal = '高级动物' soul = ' ...
- python爬取斗图网中的 “最新套图”和“最新表情”
1.分析斗图网 斗图网地址:http://www.doutula.com 网站的顶部有这两个部分: 先分析“最新套图” 发现地址栏变成了这个链接,我们在点击第二页 可见,每一页的地址栏只有后面的pag ...
- JavaScript 中函数的参数
functionName(parameter1, parameter2, parameter3) { // 要执行的代码…… } 参数规则 JavaScript 函数定义时形参没有指定数据类型. Ja ...
- TPO-18 C2 Possible participation in a sociology project
TPO-18 C2 Possible participation in a sociology project 第 1 段 1.listen to a conversation between a s ...
- mui搜索框 搜索点击事件
<div class="mui-input-row mui-search"> <input type="search" class=" ...