BZOJ 2004 公交线路(状压DP+矩阵快速幂)

注意到每个路线相邻车站的距离不超过K,也就是说我们可以对连续K个车站的状态进行状压。

然后状压DP一下,用矩阵快速幂加速运算即可。

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>#define MAXN 140
#define MOD 30031using 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=1;i<=min(n,m);i++) num[i][i]=1;}Matrix() { memset(num,0,sizeof(num)); }
}T,A,one;Matrix operator*(Matrix a,Matrix b)
{Matrix c;c.n=a.n,c.m=b.m;for(int i=1;i<=c.n;i++)for(int j=1;j<=c.m;j++)for(int k=1;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&1) ans=ans*base;base=base*base;pow>>=1;}return ans;
}int calc(int x) //计算x的二进制中1的个数
{int sum=0;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-(1<<(p-1)))<<1; //这一步相当于把from向左推了一位,个位用0补齐int tmp=from^to; //tmp应该只有一个1if(tmp==(tmp&(-tmp))) return true; //tmp只有一个1,则是合法的return false; //否则是不合法的
}int status[MAXN],top=0; //保存所有DP过程中可能出现的状态的栈int main()
{scanf("%d%d%d",&n,&k,&p);for(int S=(1<<(p-1));S<(1<<p);S++) //枚举DP状态S,S是合法状态当且仅当S的二进制中1的个数恰好为k
    {if(calc(S)==k){status[++top]=S;if(S==(1<<p)-1-((1<<(p-k))-1)) goal=top; //S是最终要达到的状态
        }}for(int i=1;i<=top;i++)for(int j=1;j<=top;j++)if(canConvert(status[i],status[j]))T.num[i][j]=1;A.n=A.m=T.n=T.m=top;A.num[1][goal]=1;T=fastPow(T,n-k);A=A*T;printf("%d\n",A.num[1][goal]);return 0;
}
View Code

 

转载于:https://www.cnblogs.com/lishiyao/p/6882236.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455606.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名

目标网站&#xff1a;首先获取第一页的数据&#xff0c;这里关键要切换到iframe里打印一下获取剩下的页数&#xff0c;这里在点击下一页之前需要设置一个延迟&#xff0c;不然会报错。结果&#xff1a;一共37页&#xff0c;爬取完毕后关闭浏览器 完整代码&#xff1a; url htt…

Idea的一些调试技巧及设置todo

程序员的工作内容&#xff0c;除了大部分时间写代码之外&#xff0c;因为有不少的时间是用在调试代码上。甚至说不是在调试代码&#xff0c;就是即将调试代码。 :) 今天我们来谈谈调试代码的一些技巧&#xff0c;在使用IDE提供的debugger时一些快速定位问题的方式。 看到这里的…

安装Node.js和npm

安装Node.js和npm 学习了&#xff1a;http://www.liaoxuefeng.com/wiki/001434446689867b27157e896e74d51a89c25cc8b43bdb3000/00143450141843488beddae2a1044cab5acb5125baf0882000 转载于:https://www.cnblogs.com/stono/p/6891242.html

c++ cstring 转换 char_cstring.h库常用函数

上周&#xff0c;老师讲了大整数的运算方法&#xff0c;我对大数的存储和运算还有些不理解&#xff0c;仔细思考了一下&#xff0c;其实还是训练孩子对机器存储数据的各种掌握和运用吧。不多想&#xff0c;先期孩子虽然一直学习&#xff0c;但是缺乏对知识的系统整理&#xff0…

Django后台管理之商品分类

商品分类 1.建表字段 1.pid&#xff1a;用来绑定父类的 2.path&#xff1a;用来拼接id&#xff0c;保证查询出的数据是按照层级关系展示的2.concat 把表中的两个字段拼接成一个新的字段&#xff0c;通过as重新命名3.查询语句 1.按照第二步拼接成新的字段的名字进行排序查询…

PMT_Stream数据结构

0123 012345670123456701234567012345671stream_type reserved_1elementary_PIDreserved_2ES_info_length 2ES_info_length …(描述信息)3…(描述信息)4crc32 1 节目号 stream_type 8指示了PID为elementary_PID的PES分组中原始流的类型&#xf…

Maven:基本使用

为什么80%的码农都做不了架构师&#xff1f;>>> 1.项目管理工具&#xff1a; Maven的repository&#xff0c;说白了就是dependency的仓库&#xff0c;它按照一定的规则将dependency存放起来&#xff0c;以作缓存&#xff0c;如果本机的 repository找不到某个depen…

UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)

UVA 11383 - Golden Tiger Claw 题目链接 题意&#xff1a;给定每列和每行的和&#xff0c;给定一个矩阵&#xff0c;要求每一个格子(x, y)的值小于row(i) col(j)&#xff0c;求一种方案&#xff0c;而且全部行列之和的和最小 思路&#xff1a;A二分图完美匹配的扩展&#xff…

浅谈web开发以及django的安装和入门

浅谈web开发 1.B/S和C/S结构 B/S:浏览器与服务器进行的交互模式&#xff08;不需要官方下载的&#xff0c;一夫多妻制&#xff09; C/S:客户机与服务器进项的交互模式&#xff08;必须官方下载的&#xff0c;一夫一妻制2.MVC和MVT MVC: M:模型层&#xff08;Model&#xff0…

大数据可视化html模板开源_大数据时代-可视化数据分析平台必不可少

公众号&#xff1a;不安分的猿人一、项目简介DataGear是一款数据管理与可视化分析平台&#xff0c;使用Java语言开发&#xff0c;采用浏览器/服务器架构&#xff0c;支持多种数据库&#xff0c; 主要功能包括数据管理、SQL工作台、数据导入/导出、数据集管理、图表管理、看板管…

java输出一些内容到日志文件

在eclipse中新建一个项目&#xff0c;在src下新建一个log4j.properties文件&#xff0c;文件内容为下&#xff1a;log4j.rootLogger debug,stdout,D,Elog4j.appender.E org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File E://logs/error.log log4j.appender.E…

PMT_Header-节目映射表的数据结构2

1 标志位 table_id8固定为0x02 &#xff0c;标志是该表是PAT2段语法标志位section_syntax_indicator 1段语法标志位&#xff0c;固定为13 zero104保留字reserved_12保留字5有用的字节数section_length 12表示这个字节后面有用的字节数&#x…

Django中的Model模型

Model模型 模型是你的数据的唯一的、权威的信息源。它包含你所储存数据的必要字段和行为。 通常&#xff0c;每个模型对应数据库中唯一的一张表。 每个模型都是django.db.models.Model的一个Python 子类。模型的每个属性都表示为数据库中的一个字段。Django 提供一套自动生成的…

python有多少种模块_python如何查看有哪些模块

Question: 如何查看正则表达式模块re及其相关函数的意义 1、终端命令行下 python >> import sys >> sys.modules ################################### 一长串信息中字段modules对应的模块即为包含的模块。 ################################### >> import r…

浅谈面向对象的javascript几个特性

javascript中的this和new javascript是一门很灵活的语言&#xff0c;尤其是function。他即可以以面向过程的方式来用&#xff0c;比如&#xff1a; function getName() {return 张三 } getName() 也可以以面向对象的方式来用&#xff0c;比如&#xff1a; function User() {th…

【Netty】ChannelHandler和ChannelPipeline

一、前言 前面学习了Netty的ByteBuf&#xff0c;接着学习ChannelHandler和ChannelPipeline。 二、ChannelHandler和ChannelPipeline 2.1 ChannelHandler 在ChannelPipeline中&#xff0c;ChannelHandler可以被链在一起处理用户逻辑。 1. Channel生命周期 Channel接口定义了一个…

TS流头部的调整字段

见 http://hi.baidu.com/xumingxsh/blog/item/7b178903f1fa98014afb512f.html http://hi.baidu.com/xumingxsh/blog/item/ba50dba320a10da3caefd02f.html

electron 入坑记

最近有个想法,想写个简单的应用程序.平时在 Mac上开发,最终有可能运行在 Windows 上.看了一下,Electron 比较简单,应该可以一试. 关于安装 我机器上是有 Node 环境的,按着官方教程 直接 npm install electron 结果运行到 npm install.js就不到了..下午上班有事,也没管他,结果一…

自动驾驶安全驾驶规则_自动驾驶知识科普 自动驾驶汽车的七大核心技术

自动驾驶技术的本质是用机器视角去模拟人类驾驶员的行为&#xff0c;其技术框架可以分为三个环节&#xff1a;感知层、决策层 和执行层&#xff0c;具体涉及传感器、计算平台、算法、高精度地图、OS、HMI等 多个技术模块。目前自动驾驶L3商业化技术已经成熟&#xff0c;L4级/L5…