反正N<=10^9肯定是矩阵乘法
反正p<=10肯定是状压dp
首先有一个非常重要的性质是任意连续P个站,必须保证K辆车必须停在其中的一个站
我们设f[i,S]表示到第i个站搞定了后,这K辆公交车停靠的站的状态集合为S的方案数
由于公交车之间是等价的,因此我们只要知道这K辆公交车离当前站的距离(∈[0,p-1])
显然这有一辆肯定距离当前站距离为0,剩下的k-1辆的距离显然在[1,p-1]中组合
可知状态数为C(k-1,p-1),不难发现状态数最多是C(5,9)=126
由此可以得到f[i,s]=∑f[i-1,s']
显然我们可以弄出转移矩阵然后矩乘加速

 const mo=;

 var w:array[..,..] of boolean;
v:array[..] of boolean;
a,b,c,d:array[..,..] of longint;
ch,m,n,k,p,i,j,h,ans:longint; procedure mul;
var i,j,k:longint;
begin
for i:= to m do
for j:= to m do
begin
c[i,j]:=;
for k:= to m do
c[i,j]:=(c[i,j]+a[i,k]*b[k,j]) mod mo;
end;
end; procedure dfs(x,t:longint);
var i:longint;
begin
if (p-x<k-t) then exit;
if t=k+ then
begin
inc(m);
w[m]:=v;
end;
for i:=x to p do
begin
v[i]:=true;
dfs(i+,t+);
v[i]:=false;
end;
end; procedure quick(n:longint);
var t,i,x:longint;
begin
x:=n;
t:=;
while x<> do
begin
inc(t);
x:=x shr ;
end;
for i:=t- downto do
begin
a:=c;
b:=c;
mul;
if ( shl i) and n<> then
begin
a:=c;
b:=d;
mul;
end;
end;
end; begin
readln(n,k,p);
v[]:=true;
dfs(,); //搜出所有状态
for i:= to m do
for j:= to m do
begin
ch:=;
for h:= to p do
if w[i,h] and not w[j,h+] then //有一辆有停靠在当前站
begin
dec(ch);
if ch< then break;
end;
if ch= then d[j,i]:=;
end; n:=n-k;
for i:= to m do
c[i,i]:=;
quick(n);
writeln(c[,] mod mo);
end.

bzoj2004的更多相关文章

  1. 【BZOJ2004】公交线路(动态规划,状态压缩,矩阵快速幂)

    [BZOJ2004]公交线路(动态规划,状态压缩,矩阵快速幂) 题面 BZOJ 题解 看到\(k,p\)这么小 不难想到状态压缩 看到\(n\)这么大,不难想到矩阵快速幂 那么,我们来考虑朴素的\(d ...

  2. BZOJ2004 HNOI2010公交线路(状压dp+矩阵快速幂)

    由数据范围容易想到矩阵快速幂和状压. 显然若要满足一辆公交车的相邻站台差不超过p,则每相邻p个站台中每辆车至少经过一个站台.可以发现这既是必要的,也是充分的. 开始的时候所有车是相邻的.考虑每次把一辆 ...

  3. 【BZOJ2004】[Hnoi2010]Bus 公交线路 状压+矩阵乘法

    [BZOJ2004][Hnoi2010]Bus 公交线路 Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1 ...

  4. 【BZOJ2004】[HNOI2010]Bus 公交线路

    [BZOJ2004][HNOI2010]Bus 公交线路 题面 bzoj 洛谷 题解 $N$特别大$P,K$特别小,一看就是矩阵快速幂+状压 设$f[S]$表示公交车状态为$S$的方案数 这是什么意思 ...

  5. BZOJ2004: [Hnoi2010]Bus 公交线路

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2004 状压dp+矩阵乘法. f[i][s]表示从第i位至前面的i-k位,第i位必须取的状态. ...

  6. bzoj2004 矩阵快速幂优化状压dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=2004 以前只会状压dp和矩阵快速幂dp,没想到一道题还能组合起来一起用,算法竞赛真是奥妙重重 小Z ...

  7. bzoj2004(矩阵快速幂,状压DP)

    每个长度为p的区间都必须出现k次1,数据又很小,我们使用状压. dp[i][j]->dp[i+1][j'],dp[i][j]表示当前考虑到了第i个车站,包括第i个其后的p个的状态(有车停或没车停 ...

  8. bzoj2004公交线路

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2004 好美妙的矩阵乘. 思考: 0.在一个序列上.所以考虑dp. 1.p<=10,k& ...

  9. BZOJ2004:[HNOI2010]Bus 公交线路(状压DP,矩阵乘法)

    Description 小Z所在的城市有N个公交车站,排列在一条长(N-1)km的直线上,从左到右依次编号为1到N,相邻公交车站间的距离均为1km. 作为公交车线路的规划者,小Z调查了市民的需求,决定 ...

随机推荐

  1. pb popmenu弹出式选单位置的问题

    在主界面上使用m_main.m_title.PopMenu(PointX(),PointY()),可以正确定位弹出式选单的位置: 在主界面的控件智商为使用m_main.m_title.PopMenu( ...

  2. 学习笔记_Java_day13_JSP三大指令()

    JSP指令 1        JSP指令概述 JSP指令的格式:<%@指令名 attr1=”” attr2=”” %>,一般都会把JSP指令放到JSP文件的最上方,但这不是必须的. JSP ...

  3. WPF TreeView递归遍历相关方法

    /// <summary> /// 递归改变组织树选中状态. /// </summary> /// <param name="org">< ...

  4. css滚动条样式

    1.横向滚动条:(abeamScroll) <div style="width:400px;height:200px;overflow-x:auto;overflow-y:hidden ...

  5. LA 3177 Beijing Guards(二分法 贪心)

    Beijing Guards Beijing was once surrounded by four rings of city walls: the Forbidden City Wall, the ...

  6. Codevs 1138 聪明的质监员 2011年NOIP全国联赛提高组

    1138 聪明的质监员 2011年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小 T 是一名质量监督员, ...

  7. leetcode342——Power of Four(C++)

    Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example:Giv ...

  8. yii2单个视图加载jss,css

    1,定义资源:首先在AppAsset.php里面定义2个方法, //按需加载css public static function addCss($view, $cssfile) { $view-> ...

  9. JS获取IP、MAC和主机名的五种方法

    javascript获取客户端IP的小程序,下面的代码是我在所有windowsNT5.0及以上的系统上都测试通过的,喜欢的朋友可以收藏下.今天在搞JS(javascript)获取客户端IP的小程序,上 ...

  10. xml之phpdom操作

    php xml编程XML解析技术介绍 1.php与DOM 2.PHP与XPath 3.SimpleXML DOM(document object model)文档对象模型 把一个文件看做一个对象模型, ...