【BZOJ2004】[Hnoi2010]Bus 公交線路 狀壓+矩陣乘法

【BZOJ2004】[Hnoi2010]Bus 公交線路

Description

小Z所在的城市有N個公交車站,排列在一條長(N-1)km的直線上,從左到右依次編號為1到N,相鄰公交車站間的距離均為1km。 作為公交車線路的規劃者,小Z調查了市民的需求,決定按下述規則設計線路:
1.設共K輛公交車,則1到K號站作為始發站,N-K+1到N號臺作為終點站。
2.每個車站必須被一輛且僅一輛公交車經過(始發站和終點站也算被經過)。?
3.公交車只能從編號較小的站臺駛往編號較大的站臺。?
4.一輛公交車經過的相鄰兩個
站臺間距離不得超過Pkm。 在最終設計線路之前,小Z想知道有多少種滿足要求的方案。由于答案可能很大,你只需求出答案對30031取模的結果。

Input

僅一行包含三個正整數N K P,分別表示公交車站數,公交車數,相鄰站臺的距離限制。
N<=10^9,1<P<=10,K<N,1<K<=P

Output

僅包含一個整數,表示滿足要求的方案數對30031取模的結果。

Sample Input

樣例一:10 3 3
樣例二:5 2 3
樣例三:10 2 4

Sample Output

1
3
81

HINT

【樣例說明】
樣例一的可行方案如下: (1,4,7,10),(2,5,8),(3,6,9)
樣例二的可行方案如下: (1,3,5),(2,4) (1,3,4),(2,5) (1,4),(2,3,5)?
P<=10 , K <=8

題解:看到P和K很小想到狀壓。用f[i][S]表示已經覆蓋了前i個車站,每個車的位置的狀態為S的方案數(S只包含前P個車站)。

由于n很大,考慮矩乘優化。我們將沒有用的狀態扔掉,最終矩陣大小是不超過$C_{10}^5\times C_{10}^5=252\times 252$的。

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int P=30031;
int n,m,k,tot;
struct M
{int v[260][260];M () {memset(v,0,sizeof(v));}int * operator [] (int a) {return v[a];}M operator * (const M &a) const{M b;int i,j,k;for(i=1;i<=tot;i++)	for(j=1;j<=tot;j++)	for(k=1;k<=tot;k++)	b.v[i][j]=(b.v[i][j]+v[i][k]*a.v[k][j])%P;return b;}
}S,T;
int r[1<<10],cnt[1<<10];
inline void pm(int y)
{while(y){if(y&1)	S=S*T;T=T*T,y>>=1;}
}
int main()
{scanf("%d%d%d",&n,&k,&m);int i,j;for(i=1;i<(1<<m);i++){cnt[i]=cnt[i-(i&-i)]+1;if(cnt[i]==k)	r[i]=++tot;}for(i=1;i<(1<<m);i++)	if(r[i]){if(i&1)	T[r[i]][r[(i>>1)|(1<<(m-1))]]++;else	for(j=0;j<m;j++)	if((i>>j)&1)	T[r[i]][r[((i^(1<<j))>>1)|(1<<(m-1))]]++;}S[1][r[((1<<k)-1)<<(m-k)]]=1;pm(n-k);printf("%d",S[1][r[((1<<k)-1)<<(m-k)]]);return 0;
}

轉載于:https://www.cnblogs.com/CQzhangyu/p/7965446.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370366.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370366.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

課時77.序選擇器(掌握)

CSS3中新增的選擇器最具代表性的就是序選擇器。 1.同級別的第幾個 1. :first-child 選中同級別中的第一個標簽 注意點&#xff1a;不區分類型 但是我們這里有一個注意點&#xff0c;如果我們在第一個p之前加一個h1&#xff0c;則第一個p就不變紅了&#xff0c;因為我們…

Gulp——文件壓縮和文件指紋

先看下文件指紋添加成功發布后的“成果”。 首先介紹下gulp的文件壓縮&#xff08;壓縮css和js&#xff09; &#xff08;下面介紹的代碼移步這里&#xff09; 我的文件目錄如下&#xff1a; &#xff08;標紅部分是生成的處理后的文件&#xff09; 如何使用gulp&#xff0c;請…

java afconsole_Java ——基礎語法

package myhello; //本類所在的包的路徑import af.util.AfMath;//導入對應的類import java.util.Random;//導入隨機數的類public classHelloWorld{public static voidmain(String[] args){int a 8;inti;int total 0;int score 80;System.out.println(a > 8);//空語句 只有…

Java 7:使用NIO.2進行文件過濾-第2部分

大家好。 這是使用NIO.2系列進行文件過濾的第2部分。 對于那些尚未閱讀第1部分的人 &#xff0c;這里有個回顧。 NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API&#xff0c;您可以執行與java.io相同的操作&#xff0c;以及許多出色的功能&#xff0c;例如&a…

js for 循環 添加tr td 算法

StringBuffer sbnew StringBuffer(); int n 5; sb.append("<tr>"); List<MenuBean> chs mb.getChildren(); for(int j 0; chs ! null && j < chs.size(); j){ MenuBean _mb2 chs.get(j); if (i % n 0)//被n整除&#xff0c;即有了n列之后…

1034. 二哥的金鏈

Description 一個陽光明媚的周末&#xff0c;二哥出去游山玩水&#xff0c;然而粗心的二哥在路上把錢包弄丟了。傍晚時分二哥來到了一家小旅店&#xff0c;他翻便全身的口袋也沒翻著多少錢&#xff0c;而他身上唯一值錢的就是一條漂亮的金鏈。這條金鏈散發著奇異的光澤&#xf…

課時76.兄弟選擇器(掌握)

我們先來明確一點&#xff0c;什么是兄弟&#xff1f; 比如&#xff0c;head和body是兄弟&#xff0c;必須是同級關系&#xff0c;如果是嵌套關系&#xff0c;兒子&#xff0c;孫子則不可以。 1.相鄰兄弟選擇器 CSS2 作用&#xff1a;給指定選擇器后面緊跟的那個選擇器選中的…

java中不能定義為變量名稱_Java,“變量名”不能解析為變量

我使用Java使用Eclipse&#xff0c;出現此錯誤&#xff1a;"Variable name" cannot be resolved to a variable.使用此Java程序&#xff1a;public class SalCal {private int hoursWorked;public SalCal(String name, int hours, double hoursRate) {nameEmployee …

24v開關電源維修技巧_康佳LED液晶彩電KPS+L1900C301電源板原理與維修

康佳液晶彩電采用的KPSL1900C3-01型電源板&#xff0c;編號為34007728&#xff0c;版本號為35015686集成電路采用FAN7530FSGM300FSFR1700組合方案&#xff0c;輸出5.1VSB/4A、24V/4A、12V/4A電壓。應用于康佳LED47IS988PD、LED42M11PD、LED46MS92DC、LED42IS988PDE、LED42X5000…

zookeeper集群 新手安裝指南

Zookeeper集群的角色&#xff1a; Leader 和 follower &#xff08;Observer&#xff09;zk集群最好配成奇數個節點只要集群中有半數以上節點存活&#xff0c;集群就能提供服務本事例采用版本:zookeeper-3.4.5 虛擬機:zk1 zk2 zk3/****************************************…

Google Guava并發– ListenableFuture

在上一篇文章中&#xff0c;我介紹了使用番石榴庫中com.google.common.util.concurrent包中的Monitor類。 在本文中&#xff0c;我將繼續介紹Guava并發實用程序&#xff0c;并討論ListenableFuture接口。 ListenableFuture通過添加接受完成偵聽器的方法&#xff0c;從java.util…

課時71.后代選擇器(掌握)

1.什么是后代選擇器&#xff1f; 作用&#xff1a;找到指定標簽的所有后代標簽&#xff0c;設置屬性。 首先你要明確什么是后代&#xff1f; 你的兒子&#xff0c;孫子&#xff0c;重孫子等&#xff0c;只要有你的血脈的&#xff0c;都是你的后代。 我們先來舉個例子 我們想…

java小球碰撞界面設計_JavaScript實現小球碰撞特效

JavaScript實現小球碰撞特效。類似自由落體運動。實現原理非常簡單&#xff0c;就是動態的改變每個元素的坐標。使用radius屬性將圖片圓角化。使用left&#xff0c;top屬性動態的改變小球的位置。碰撞反彈球&#xff0c;當碰撞到容器的邊緣后&#xff0c;進行反彈&#xff0c;反…

es6常用基礎合集

es6常用基礎合集 在實際開發中&#xff0c;ES6已經非常普及了。掌握ES6的知識變成了一種必須。盡管我們在使用時仍然需要經過babel編譯。 ES6徹底改變了前端的編碼風格&#xff0c;可以說對于前端的影響非常巨大。值得高興的是&#xff0c;如果你熟悉ES5&#xff0c;學習ES6并不…

java接口開發_如果你想學好Java,這些你需要了解

01基本知識  在學習Java之前&#xff0c;您需要了解計算機的基本知識&#xff0c;然后再學習Java。同時&#xff0c;您需要熟悉DOS命令、Java概述、JDK環境安裝配置、環境變量配置。JDK和環境變量配置完成后&#xff0c;就可以編寫Java程序了。02編程格式  此時&#xff0c…

從Java程序生成QR碼圖像

如果您精通技術和小工具&#xff0c;則必須了解QR碼。 這些天&#xff0c;到處都可以找到它-在博客&#xff0c;網站&#xff0c;甚至在某些公共場所。 這在移動應用程序中非常流行&#xff0c;在移動應用程序中&#xff0c;您可以使用QR Code掃描儀應用程序掃描QR Code&#x…

LintCode-最長公共子串

給出兩個字符串&#xff0c;找到最長公共子串。并返回其長度。 您在真實的面試中是否遇到過這個題&#xff1f; Yes例子 給出A“ABCD”&#xff0c;B“CBCE”&#xff0c;返回 2 注意 子串的字符應該連續的出如今原字符串中&#xff0c;這與子序列有所不同。標簽 Expand 相關…

課時67.標簽選擇器(掌握)

通過上節課的學習我們明白了如何通過十六進制來表示顏色 例如&#xff1a;紅色的幾種表示方法 我們發現在學習CSS當中的一些屬性的時候&#xff0c;它都有一些套路 只要知道屬性的名稱&#xff0c;屬性有什么作用&#xff0c;它有哪些取值&#xff0c;這個屬性有什么注意點 …

計算幾何問題 java_【轉載】ACM計算幾何題目推薦

2107 Quoit Design 典型最近點對問題POJ 3714 Raid 變種最近點對問題B&#xff0c;最小包圍圓最小包圍圓的算法是一種增量算法&#xff0c;期望是O(n)。ZOJ 1450 Minimal CircleHDU 3007 Buried memoryC&#xff0c;旋轉卡殼POJ 3608 Bridge Acr…

jdbc連接oracle的幾種格式

1. SID的方式。已經不推薦使用這種方式了。 jdbc:oracle:thin:[<user>/<password>]<host>[:<port>]:<SID> 2.Service Name的方式。 jdbc:oracle:thin:[<user>/<password>]//<host>[:<port>]/<service> 3.TNSNames…