乙個排隊問題,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 分...