题面

Bzoj

Sol

状压很显然

重点在于转移:题目就相当与每\(p\)长度的车站必须有且仅有\(k\)个被经过

那么转移时状压的二进制一定要有\(k\)个一

且两个相邻转移的状态之间必须满足:设为\(i->j\),则\((i >> 1) \&j\)要有\(k-1\)个\(1\)

然后就可以加上矩阵快速幂优化,注意把满足要求的状态记下来,只有一百多个

我常数丑是我的错

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int Zsy(30031); IL int Input(){
RG int x = 0, z = 1; RG char c = getchar();
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x * z;
} int n, k, p, cnt[1024], que[150], len, pos; IL void Up(RG int &x, RG int y){
x += y;
if(x >= Zsy) x -= Zsy;
} struct Matrix{
int a[150][150]; IL Matrix(){
Fill(a, 0);
} IL int* operator [](RG int x){
return a[x];
} IL void Init(){
for(RG int i = 0; i < len; ++i) a[i][i] = 1;
} IL Matrix operator *(RG Matrix B){
RG Matrix C;
for(RG int i = 0; i < len; ++i)
for(RG int j = 0; j < len; ++j)
for(RG int l = 0; l < len; ++l)
Up(C[i][l], 1LL * a[i][j] * B[j][l] % Zsy);
return C;
}
} S, E, T; int main(RG int argc, RG char* argv[]){
n = Input(), k = Input(), p = Input();
for(RG int i = 0; i < (1 << p); ++i){
for(RG int x = i; x; x -= x & -x) ++cnt[i];
if(cnt[i] == k && (i & 1)) que[len++] = i;
}
for(RG int i = 0; i < len; ++i)
if(que[i] == (1 << k) - 1) pos = i;
for(RG int i = 0; i < len; ++i)
for(RG int j = 0; j < len; ++j)
if(cnt[(que[i] >> 1) & que[j]] == k - 1) T[i][j] = 1;
E.Init(), S[0][pos] = 1;
for(RG int i = n - k; i; i >>= 1, T = T * T)
if(i & 1) E = E * T;
S = S * E;
printf("%d\n", S[0][pos]);
return 0;
}

[HNOI2010]BUS 公交线路的更多相关文章

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

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

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

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

  3. bzoj 2004: [Hnoi2010]Bus 公交线路

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

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

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

  5. 【bzoj2004】[Hnoi2010]Bus 公交线路 状压dp+矩阵乘法

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

  6. [bzoj2004] [洛谷P3204] [Hnoi2010] Bus 公交线路

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

  7. [BZOJ 2004] [Hnoi2010] Bus 公交线路 【状压DP + 矩阵乘法】

    题目链接: BZOJ - 2004 题目分析 看到题目完全不会..于是立即看神犇们的题解. 由于 p<=10 ,所以想到是使用状压.将每个连续的 p 个位置压缩成一个 p 位 2 进制数,其中共 ...

  8. BZOJ 2004: [Hnoi2010]Bus 公交线路 [DP 状压 矩阵乘法]

    传送门 题意: $n$个公交站点,$k$辆车,$1...k$是起始站,$n-k+1..n$是终点站 每个站只能被一辆车停靠一次 每辆车相邻两个停靠位置不能超过$p$ 求方案数 $n \le 10^9, ...

  9. 【BZOJ 2004】: [Hnoi2010]Bus 公交线路

    题目链接: TP 题解:   所以说,超显眼的数据范围啊. 很显然我们对于每个P的区间都是要有k个站被bus停留,然后考虑转移的话应该是把这k个站里的某个bus往前走,那么转移也很显然了,n的范围很大 ...

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

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

随机推荐

  1. Linux用于嵌入式

    步骤1:Linux工具和项目布局 每个嵌入式软件设计都从选择合适的工具开始. 工具链是一组连接(或链接)在一起的软件开发工具,它包含诸如GNU编译器集合(GCC).binutils(一组包括连接器.汇 ...

  2. [译]Serilog Tutorial

    在过去的几年中,结构化日志已经大受欢迎.而Serilog是 .NET 中最著名的结构化日志类库 ,我们提供了这份的精简指南来帮助你快速了解并运用它. 0. 内容 设定目标 认识Serilog 事件和级 ...

  3. Java经典编程题50道之二十五

    一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同. public class Example25 {    public static void main(Stri ...

  4. 机器学习之Adaboost (自适应增强)算法

    注:本篇博文是根据其他优秀博文编写的,我只是对其改变了知识的排序,另外代码是<机器学习实战>中的.转载请标明出处及参考资料. 1 Adaboost 算法实现过程 1.1 什么是 Adabo ...

  5. java1 - 环境与简介

    一.阅读 JAVA历史 回答以下问题: JDK 是什么? JRE 是什么? java 有那三大平台? java 开发工具有那些? java 可以在那些系统上面做开发? java 工程师可以做什么? 二 ...

  6. GET和POST传送数据的限制

    GET 方法 请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的: /test/demo_form.asp?name1=value1&name2=value2 有关 GET ...

  7. CentOS7上安装FTP服务

    ---------------------------------------------------------------------------------------------------- ...

  8. SQLite常用函数及语句

    SQLite3.0使用的是C的函数接口,常用函数如下: sqlite3_open() //打开数据库 sqlite3_close() //关闭数据库 sqlite3_exec() //执行sql语句, ...

  9. nodejs的基础概念

    1.node 安装与相关配置. 2.Node.jsREPL(交互式解释器) 类似于控制台,可以输入命令,并接受系统的响应. REPL 的功能: 1.读取:读取用户输入,解析输入的 js 数据结构,并存 ...

  10. 用一个简单的例子比较SVM,MARS以及BRUTO(R语言)

    背景重述 本文是ESL: 12.3 支持向量机和核中表12.2的重现过程.具体问题如下: 在两个类别中产生100个观测值.第一类有4个标准正态独立特征\(X_1,X_2,X_3,X_4\).第二类也有 ...