洛谷P2822 組合數問題(題解)

2022-04-12 03:20:35 字數 979 閱讀 2348

題目傳送)

先了解一下有關組合數的公式:(m在上,n在下)

發現組合數的遞推的直觀影象形式就是楊輝三角(第i行第j列的數等於c(i-1,j-1))

由於題目要求多組組合數,便可以遞推組合數做預處理(直接用通項公式算什麼的太粗暴(慢)了)。一看資料範圍,保證讓普通範圍溢位的節奏啊,但定心一看,我們只用知道每個組合數是否能整除k就可,所以可以每次遞推算組合數時模k。  tip:遞推不要忘了初始狀態(邊界)

求出組合數後,發現如果對每次詢問都從頭到尾掃一遍的話保準會超時,便想到了乙個能有效減少查詢統計時的複雜度,每一次查詢o(n)降到o(1)的神器——字首和。求乙個矩陣的字首和,只要記住公式:上加左,減上左,加自己。

ac**如下:

1 #include2 #include3

using

namespace

std;

4int c[2002][2002],n[10001],m[10001],dp[2001][2001];5

intmain()

6

15 c[1][1]=1;16

int mmaxb=mmax;

17if(mmax>nmax) mmax=nmax+1;18

else mmax++;

19for(int i=2;i<=nmax+1;i++)

20for(int j=1;j<=min(i,mmax);j++)

21//

這裡用楊輝三角遞推的組合數,***需要多做一行***,其實沒有直接推組合數方便。

25for(int j=1;j<=mmaxb;j++) dp[0][j]+=dp[0][j-1

];26

for(int i=1;i<=nmax;i++)

27for(int j=0;j<=mmaxb;j++)

2833

for(int i=1;i<=t;i++) cout34return0;

35 }

洛谷P2822 組合數問題

題目描述 組合數 cmn m在上,n在下 表示的是從 n個物品中選出 m 個物品的方案數。舉個例子,從 1,2,3 三個物品中選擇兩個物品可以有 1,2 1,3 2,3 這三種選擇方法。根據組合數的定義,我們可以給出計算組合數 cmn的一般公式 其中 n 1 2 n 特別地,定義 0 1。小蔥想知道...

洛谷 P2822 組合數問題

已知組合數 從 n 個物品中選擇 m 個物品的方案數 c m n c n,m binom frac 其中 n 1 times 2 times 3 times cdots times n specially define 0 1 給定 n m k 對於所有的 0 le i le n 0 le j le...

P2822 組合數問題

題目描述 組合數c n mc n m 表示的是從n個物品中選出m個物品的方案數。舉個例子,從 1,2,3 三個物品中選擇兩個物品可以有 1,2 1,3 2,3 這三種選擇方法。根據組合數的定 義,我們可以給出計算組合數的一般公式 c n m m n m n 其中n 1 2 n 不清楚不要怪我,暫時找...