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.pswp.cn/news/455606.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455606.shtml
英文地址,請注明出處:http://en.pswp.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…