HDU 2604 矩陣快速冪 較難推的公式

2022-05-22 16:09:08 字數 1234 閱讀 9047

乙個排隊問題,f代表女,m代表男,f和m出現的機率相等。問乙個長為l的隊伍不能出現 fmf 和 fff這樣的串總共有多少種。

這個題目的公式遞推略難啊。。。我看了別人部落格才想明白原來是這麼遞推出來的。

首先把前幾項寫出來。

l=0 ,ans=0;

l=1,ans=2;

l=2,ans=4;

l=3,ans=6;

l=4,ans=9;

規律有點難找,直接遞推出來,假設 長度為n的串,n>4,ans[n] 無非就是在 ans[n-1]的基礎上加乙個 f或者m,如果在ans[n-1]的基礎上在佇列最後加乙個m,則絕對合法,因為不論前面n-1個是怎麼排列,最後加乙個m,絕對不會構成fmf或者fff,所以 ans[n]+=f[n-1]; 但是如果最後一位加的是f,

就要分類討論了:

這個時候,如果n-1位為m,則 n-2位一定要是m 也就是說 一定要 ans[n-3]+mmf才滿足條件,於是ans[n]+=ans[n-3]

這個時候,如果n-1位為f,則n-2位必定為m(否則就後三位fff了),不僅如此,第n-3位一定要是m(否則就fmf了),所以就要 ans[n-4]+mmff,所以ans+=ans[n-4];

所以最後的遞推出來的公式就是 ans[n]=ans[n-1]+ans[n-3]+ans[n-4];

得此公式,構造出矩陣。。。凡是學過矩陣快速冪的應該都會寫了。

#include #include 

#include

using

namespace

std;

intl,m;

int date[6

];struct

mat;

mat s,e;

mat

operator *(mat a,mat b)

returnc;}

mat

operator ^(mat a,int

x)

returnc;}

void

init()

intmain()

mat ans;

ans=s^(l-4

);

int sum=0

;

for (int i=0;i<4;i++)

sum%=m;

printf(

"%d\n

",sum);

}return0;

}

HDU 2604 Queuing 矩陣快速冪

題目大意 有2 l個長度為l的字串,字串只能有f或m組合而成,問這些字串中不含有fmf或著fff的字串有多少個 解題思路 設f n 為字串長度為n,且字串中不包含fmf或者fff的字串個數 假設現在填到第n位了,最後乙個字元如果填的是m的話,那麼f n 1 的都可以填 最後一位填的如果是f的話,這就...

HDU 2604 Queuing 矩陣快速冪

大意 一列人有mf 男,女 問最後不是fmf和fff的排列方式有多少種。思路 就是個遞推,類似推骨牌從最後一位來考慮,ps骨牌 最後的牌排列方式有橫著或者豎著,豎著的話有f n 1 中,否則橫著就是f n 2 此題也是當最後為m有f n 1 當為f時不確定看兩位mf,ff 所以最終的表示式就是f n...

hdu 2604 Queuing 矩陣快速冪

鏈結 題意 給出乙個佇列,其中站著f 女人 m 男人 讓你求出佇列中不含有fmf和fff的佇列總共的種類數 對m取模 佇列長度達到1e6肯定不能用排列組合做。是用遞迴順序求的方式。因為要取模,所以不能打表,只能每次求,這樣就需要用到矩陣快速冪來降低時間複雜度了。遞推公式 a i 0 aa i 3 分...