HDU 2604 Queuing(矩陣高速冪)

2021-09-07 11:00:31 字數 1057 閱讀 6374

這題僅僅要推出公式來,構造矩陣就非常easy了。問題是推不出公式來。。tat。。

從遞推的思路考慮。用f(n)表示n個人滿足條件的結果。假設最後乙個是m則前n-1人能夠隨意排列,有f(n-1)種;假設是f,則考慮後兩位mf和ff,沒有一定滿足或者一定不滿足的狀態,所以繼續考慮一位,考慮後三位mmf, fmf, mff, fff,當中fmf和fff不符合條件。假設是mmf,則前n-3種能夠隨意排列,有f(n-3)種。假設是mff。則繼續往前考慮一位。假設是fmff不符合條件,假設是mmff。前n-4能夠隨意排列。有f(n-4)種。

則推出遞推公式:f(n)=f(n-1)+f(n-3)+f(n-4);

可是這樣遞推過去明顯會超時,所以須要用矩陣來加速。

然後構造矩陣:

1,0,1,1

1,0,0,0

0,1,0,0

0,0,1,0

求矩陣的k-4次冪。

**例如以下:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

int mod, a[6]=;

struct matrix

init, res;

matrix mult(matrix x, matrix y)}}

return tmp;

}matrix pow(matrix x, int k)

return tmp;

}int main()

init.ma[0][0]=1;

init.ma[0][1]=0;

init.ma[0][2]=1;

init.ma[0][3]=1;

for(i=1;i<4;i++)

}res=pow(init,k-4);

int ans=0;

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

printf("%d\n",ans);

}return 0;

}

HDU2604 Queuing 遞推 矩陣快速冪

題目鏈結 題意 男為f,女為m,求在長度為l的佇列中不存在fmf,fff這樣子序列的序列的個數。思路 又是遞推題,假設長度為l的佇列中存在的序列個數為f l 那麼考慮最後乙個放的字母,假設最後乙個放m,那麼前l 1個可以隨意排列,即個數為f l 1 如果最後乙個放f,那麼考慮後兩個字母,可能出現的情...

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...