题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2004

好美妙的矩阵乘。

思考:

0.在一个序列上。所以考虑dp。

1.p<=10,k<=8,所以考虑状压,1表示这一站正有公交车。

2.n<=1e9,考虑矩阵乘优化dp。

3.因为每一步<=p,所以维护长度为p的区间中的当前状态就行了,其他位置肯定全是0。这样也压得下。

实现:

为了不重不漏,需要指定一个顺序一样的东西。

  比如我们可以指定最左边一定得有一辆车,而且每次状态改变一定是这辆车走了。

    转移条件就是(当前状态)<<1 与 (目标状态) 只有一位不同,即( (当前状态)<<1 & (目标状态) )==k-1。

  对称地,我们也可以指定最右边一定得有一辆车,状态改变时是随便位置的一辆车走到了这个位置。

    转移条件略。

  因为只能从左往右走,所以这两种方式比指定中间某个位置一定得有一辆车更优。

更妙的是因为每次移动区间之前都有一个 不与之前重复的 指定位置一定有车,而本次更新出来的状态都是建立在该位置有车的前提上的,所以就能保证每一站都被停过!

每一站都只停一次就是通过区间内有k个1来保证。

最后需要乘一下最初的状态,就是开头有k个1的那个。

  如果我们把开始的右端看作第k个位置,结束就是在第n个位置;而且这样开始和结束的状态就都是000001111111的样子。

  如果从1~(1<<p-1)枚举数字是否合法,则第一个得到的合法状态就是000001111111的样子。

  所以最后乘一个只有[1][1]是1的状态矩阵(初始),再输出[1][1]位置的值(最终)就行啦!因为乘状态矩阵对[1][1]的值无影响,所以不乘也行。

代码:

  合法状态不用算末位是0但有k个1的,因为没人转移给它们值,所以它们就没用了。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=,mod=;
int n,m,p,cnt,lm,list[N];
struct Matrix{
int v[N][N];
void init()
{
for(int i=;i<=cnt;i++)v[i][i]=;
}
Matrix operator *(const Matrix &b)const
{
Matrix tp;memset(tp.v,,sizeof tp.v);
for(int i=;i<=cnt;i++)
for(int j=;j<=cnt;j++)
for(int k=;k<=cnt;k++)
(tp.v[i][j]+=v[i][k]*b.v[k][j])%=mod;
return tp;
}
}res,tp;
int num(int x)//很好
{
int ct=;
while(x){x-=(x&-x);ct++;}
return ct;
}
int main()
{
scanf("%d%d%d",&n,&m,&p);
lm=(<<p);
for(int i=;i<lm;i++)
if((i&)&&num(i)==m)list[++cnt]=i;
for(int i=;i<=cnt;i++)
for(int j=;j<=cnt;j++)
if(num(list[i]&(list[j]<<))==m-)tp.v[i][j]=;
int ct=n-m;res.init();
while(ct)
{
if(ct&)res=res*tp;
tp=tp*tp;ct>>=;
}
printf("%d",res.v[][]);
return ;
}

bzoj2004公交线路的更多相关文章

  1. bzoj2004公交线路——DP+矩阵加速递推

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2004 求方案数,想到DP: 因为两个站间距离<=p,所以每p个站中所有车一定都会停靠至 ...

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

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

  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. AMap公交线路查询

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta http ...

  6. Android百度地图开发(五)公交线路详情搜索、多条线路显示

    一.公交线路详情检索 获取公交线路的详情主要分来两步,1.获取公交线路的Uid,2.通过Uid获取公交线路详情. 1.获取公交线路的Uid: /* * 获得公交线路图的Uid,并且根据系Uid发起公交 ...

  7. 济南最新公交线路一览(BRT)

    济南最新公交线路一览(BRT) 济南BRT1路 高速公交线路 黄岗路东5:30-21:30 全福立交桥西5:30-21:30 票价1元,刷卡9折,月票有效 高速公交公司 去程:黄岗路东(BRT) - ...

  8. 公交线路免费api接口代码

    描写叙述:本接口主要是依据城市名称 +  线路名称 模糊查找城市公交线路信息. 开源api接口:http://openapi.aibang.com/bus/lines?app_key=keyvalue ...

  9. 【百度地图API】如何制作公交线路的搜索?如331路

    原文:[百度地图API]如何制作公交线路的搜索?如331路 摘要: 从A点到B点的公交导航大家都知道怎么做了,那么单独查询331路公交车的公交路线,如何制作呢?我们一起来学习一下~ --------- ...

随机推荐

  1. c++第二十天

    p111~p114: 与旧代码的接口 1.C++程序中的C风格字符串:任何出现字符串字面值的地方都可以以空字符结束的字符数组来替代. const char str[] = {"Hello, ...

  2. Sybase数据库第三方软件安装

    Sybase数据库第三方软件安装 1,安装软件:IQNC160011P_1-20011253.ZIP

  3. 树莓派实践部分——P2P文件下载机torrent之Raspberry Pi管理

    树莓派实践--P2P文件下载机torrent之Raspberry Pi管理 一.树莓派配置文件共享软件deluge 在进行实践之前,先通过命令sudo apt-get update 和sudo apt ...

  4. git仓库迁移的两种解决方案

    Git仓库迁移而不丢失log的方法 要求能保留原先的commit记录,应该如何迁移呢? 同时,本地已经clone了原仓库,要配置成新的仓库地址,该如何修改呢? 注意:如果使用了代码审核工具Gerrit ...

  5. Python3基础 print 输出helloworld

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. [BZOJ2834]回家的路

    Description Input Output Sample Input 2 1 1 2 1 1 2 2 Sample Output 5   思路还是很简单的,然而最短路打错各种对拍各种调了一早上 ...

  7. notepad++下载32位,安装插件管理

    下载32位地址: https://notepad-plus-plus.org/download/v7.6.4.html 下载插件: 链接: https://pan.baidu.com/s/1tRSo4 ...

  8. XML_CPP_资料

    1.TinyXML解析xml文档 - zhoubl668的专栏:远帆,梦之帆! - 博客频道 - CSDN.NET.html http://blog.csdn.net/zhoubl668/articl ...

  9. 2019年,给JAVA程序员六个建议

    1.深入学习一项技能 或许你学习了很多各种高大上的框架与知识点,对其都了解一二,那么你的视野是很广的,但是这并不能很稳妥的为你的未来带来更好的提升,正如18年末的程序员寒季,大批程序员被辞,我想我们应 ...

  10. <p>1、查询端口号占用,根据端口查看进程信息</p>

    2017年6月份的时候,我就着手在公司推广git,首先我自己尝试搭建了GitLab来管理代码,并且通过以下博客记录了GitLab的搭建,以及GitLab备份,GitLab升级等事情. git学习——& ...