解題報告 Noip2016提高組 組合數問題

2021-08-10 06:28:42 字數 1037 閱讀 5463

day2 t1

題目大意

告訴你組合數公式,其中n!=1*2*3*4*5*…*n;意思是從n個物體取出m個物體的方案數

現給定n、m、k,問在所有i(1<=i<=n),所有j(1<=j<=min(i,m))的(i,j)滿足cji是k的倍數的個數。

輸入樣例:

2 5 (兩個數,第乙個數t表示該資料有t組詢問,第二個為k,接下來t行分別為n,m)

4 5

6 7

輸出樣例:

0 7

資料範圍:1<=n,m<=2000,1<=t<=10000,1<=k<=21

數論題,當時做竟然沒發現這就是個楊輝三角,就是少了第一列全是1的,真是悲劇。

組合數的遞推式就是cmn=cm-1n-1+cmn-1

因為k一開始就固定了,所以預處理2000以內的個數,用字首和優化優化就可以ac了,當然用二維字首和似乎能優化到o(1),不麻煩每行乙個字首和到時候o(n)的得出答案也不會超時。

這是一道數論題

首先要知道組合數的一般遞推公式,它的遞推公式和楊輝三角是一樣的

c[i][j]=c[i-1][j-1]+c[i-1][j]

(解釋:c[i][j]即為從i件物品中選j件的方案數。如果第i件物品不選,方案數就變為c[i-1][j],如果選第i件物品,方案數就變為c[i-1][j-1],總方案數就為兩種情況的方案數之和)

為了不爆long long,每次求出c[i][j]後先模一下k

為了節約時間,進行二維求和,最後直接查詢答案

#include

#include

#include

#include

using

namespace

std;

int a[2005][2005],ji[2005][2005];

int n,m,ans,t,k;

int main()

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

return

0;

}

NOIP2016提高組總結

這次noip可以用幾個字來形容 浪的飛起,頹的不行。中午從校門出發,在車上睡了半個車程。4 00左右,霧比較大,遠處的小蠻腰若隱若現。你好,廣州。5 00,symbol叫我們去看考場,結果被拒在門外,然後大家都散了。我與其它幾位小夥伴匆匆吃完飯,回到酒店,該看電視看電視,中途開會,提醒我們一些注意事...

NOIP2016 提高組 總結

這是倒數第三次noip了。今年我初三。去年的傷痕還未褪去,我在比賽前意識到,當務之急其實是鞏固基礎而非深究一些難題。於是賽前兩周,我認真讀了白書的前面部分,尤其重點練習了dp。dp作為基礎演算法之一,其靈活性極高,所以可以出得很難,也是各種比賽的寵兒。練好dp是尤為重要的。賽前好幾場模擬賽都做得很爛...

NOIP2016提高組總結

來到了廣州,不錯啊,旁邊的飯店很多,可以好好的腐一下了。一群人走進了乙個小巷,住進了乙個七天酒店,發現房間裡面好小啊。吃完飯後,一直都在腐敗。通知開會的同學並沒有到我們的房間來,結果在結束開會的前幾分鐘我們才過去。早早的睡了 第一天,狀態不錯。早早的到了考場。開啟c 發現除錯不了,嚇了我一大跳。做到...