題目描述:
給定n組詢問,每組詢問給定兩個整數a,b,請你輸出c(a,b) mod (10^9+7)的值。
輸入格式
第一行包含整數n。接下來n行,每行包含一組a和b。
輸出格式
共n行,每行輸出乙個詢問的解。
資料範圍
1≤n≤10000,1≤b≤a≤2000
輸入樣例:
3
3 15 3
2 2
輸出樣例:
3
101
分析:
本題b和a的範圍均不超過2000,故我們可以預處理出所有組合數的值,乙個1 + 2 +...+2000 = 1000 * 2001約等於兩百萬,故可以在一秒內計算完成。具體的求法利用了組合數的遞推式c(n,m) = c(n - 1,m) + c(n - 1,m - 1)。該遞推式的推導使用的是類似於dp的思想,c(n,m)表示在n個物品中選出m個物品的選法,可以劃分為兩種情況,第一種情況是m個物品均來自前n-1個物品,一共c(n-1,m)中選法;第二種情況是m - 1個物品來自前n - 1個物品,最後乙個物品來自第n個物品,一共c(n-1,m-1)種選法,故可以得到c(n,m) = c(n - 1,m) + c(n - 1,m - 1)。邊界情況為乙個都不選的情況,方案數為1。
#include using namespace std;
const int maxn = 2005,mod = 1e9 + 7;
int c[maxn][maxn];
int main()
}while(n--)
return 0;
}
17 求組合數 I
需要根據組合數問題的資料範圍來選擇用哪一種方式來實現求組合數 上式的證明 要求從a個蘋果裡選b個蘋果的方案數,首先人為的在a個蘋果當中隨意標記乙個蘋果,然後把選法分為兩種情況 從a個蘋果裡選b個蘋果的選法中包含這個蘋果,以及從a個蘋果裡選b個蘋果的選法中不包含這個蘋果 c a 1,b 1 c a 1...
組合數學 求組合數
對於求組合數,要根據所給資料範圍來選擇合適的演算法 這道題中所給的資料範圍適合用打表的方法直接暴力求解 先用4e6的複雜度預處理出所有的情況,再用1e4的複雜度完成詢問即可 include using namespace std const int n 2010 const int mod 1e9 ...
吉首 組合數 求組合數因子個數
時間限制 1 sec 記憶體限制 128 mb 求組合數c n,m 以及c n,m 因子個數。n和m,其中0 m n 50,以eof結束。該組合數結果。3 2 4 23 2 6 4先利用楊輝三角求出組合數,然後就是求出因子數了 求因子數 素數分解的唯一性,乙個數可以被分解成若干素數相乘 p1 x1 ...