P2822 組合數問題

2021-09-25 08:31:23 字數 1367 閱讀 4187

小蔥想知道如果給定 n,m 和 k,對於所有的 0≤i≤n,0≤j≤min(i,m) 有多少對 (i,j)(i,j) 滿足 ci取j 是 k 的倍數。

輸入格式:

第一行有兩個整數 t,kt,k,其中 tt 代表該測試點總共有多少組測試資料,k 的意義見問題描述。

接下來 tt 行每行兩個整數 n,m,其中 n,m 的意義見問題描述。

輸出格式:

共 t行,每行乙個整數代表所有的0≤i≤n,0≤j≤min(i,m) 中有多少對 (i,j)(i,j) 滿足ci取j是 k 的倍數。

輸入樣例#1:

1 2

3 3

輸出樣例#1:
1
輸入樣例#2:
2 5

4 56 7

輸出樣例#2:
0

7

dp[n][m]即為所求答案的意思,則有公式:

dp[i][j]=dp[i-1][j]+f[i][j] f[i][j]=c(i,k)% k==0的個數,0<=k<=j

又有f[i][j]=f[i][j-1]+(c(i,j)%k ==0 ),

c[i][j]=(c[i-1][j-1]+c[i]-1[j])%k , 因為a=b+c, a%k=(b%k+c%k)%k

一題三個dp。。。。

#include

using

namespace std;

char buf[

1<<17]

,*l=buf,

*r=buf;

inline

chargc(

)template

<

typename t>

inline

void

read

(t&x)

const

int maxn=

2e3+3;

int dp[maxn]

[maxn]

,f[maxn]

[maxn]

,c[maxn]

[maxn]

;int t,k;

intmain()

} f[0]

[0]=

(c[0][

0]==0

);for(

int i=

1; i++i)

} dp[0]

[0]=f[0]

[0];

for(

int i=

1; i++i)

}int x,y;

while

(t--

)return0;

}

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 不清楚不要怪我,暫時找...

P2822組合數問題

題目鏈結 眾所周知,小蔥同學擅長計算,尤其擅長計算組合數。而且這道題與組合數有關係。乍一看什麼思路沒有,硬想柿子想了半小時。不知道結論,wtcl。後來打表發現規律,發現是個非常水的規律題,然後5min寫完 3min調 交上去ac了。題外話 自己寫的快讀掛了。模 k 下的楊輝三角,值為 0 的位置權值...

P2822 組合數問題

組合數 表示的是從n個物品中選出m個物品的方案數。舉個例子,從 1,2,3 三個物品中選擇兩個物品可以有 1,2 1,3 2,3 這三種選擇方法。根據組合數的定 義,我們可以給出計算組合數的一般公式 其中n 1 2 n 小蔥想知道如果給定n,m和k,對於所有的0 i n,0 j min i,m 有多...