Codeforces 852B 矩陣乘法優化DP

2021-08-08 04:31:17 字數 795 閱讀 5104

大致題意:有 l 層的城市群,每層城市群由n個不相連的城市構成,上一層的第 i 個城市到下一層的第 j 個城市的代價是b[ j ],從最頂層的入口到第1層城市i的代價為 a[ i ],從最底層的城市k到出口的代價為c[ k ] ,問有多少種方法使得從入口到出口的代價和為m的倍數(答案對1e9+7取餘數)。( l<=10^5 , n<=10^6 , m<=100)

dp方程顯然可以定為 f[ i ] [ j ]表示到了第 i 層花銷對m取余為j的方法數,然後可以發現每層之間的轉移方程是不會變的,於是就可以用矩陣乘法+快速冪來快速進行dp轉移。

小細節就是到了第n-1層時就不能繼續用原來的轉移方程了,因為最後一層到出口的代價不一樣了,最後特殊處理一下就好了。

**:#include using namespace std;

inline void read(int &x)

inline void read(long long &x)

inline void write(int x)

if(!x)

int len=0; for(;x;x/=10) s[len++]=x % 10+'0';

for(int i=len-1;i>=0;--i) putchar(s[i]);

}const int maxn = 1100000;

int tot,l,lim;

int v[ maxn ];

long long cnt[ 200 ];

struct matrix

void out(){

puts("");

for (int i=0;i

CODEFORCES 535B 解題報告

仍然是水題,但是還是有可以說的地方。主要思路就是dfs可重排列。4,7組成的幸運數字,在n位數字的構造方式有2 n種,而資料是最多9位,則列舉只有512種,n 2的複雜度足矣。只列舉相應位數的4 7排列,前面的個數用2 n累加。只要遵循先選4再選7即可構造字典順序,然後查詢相應數。以下是 可直接ac...

CodeForces 816B(區間計數)

codeforces 816b 題意 給出n個區間和乙個k值,再給出q次詢問,每次詢問給出乙個區間,要求這個區間中的數在開始的n區間中出現次數不少於k次的數目。解法 將n個區間的每個數每出現一次就加一,最後統計q詢問的區間中不小於k的數的個數。寫這題主要是想講乙個常用的區間更新的方法,其實這題也可以...

Codeforces 965B 題解報告

當k 1時,取第乙個 的座標即可 當k 1時,需要求出每乙個點在上下左右四個方向所能到達的最遠處,記為up,down,left,right,再取上下方向和左右方向的和的最大值,即 max 0,up down k max 0,left right k n,k map int,input split a...