fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5.  
  6. // Cách tính thứ 3: tam giác Pascal
  7.  
  8. // - nCk = (n - 1)Ck + (n - 1)C(k - 1)
  9. // - còn cái ô ở toạ độ (n, k) trong tam giác Pascal có giá trị = nCk
  10.  
  11. const int N = 1e3 + 5;
  12. const int MOD = 1e9 + 7;
  13.  
  14. int C[N][N]; // C[i][j] = iCj
  15.  
  16. // Chi phí bộ nhớ: O(n^2)
  17. // Chi phí precompute: O(n^2)
  18. // Chi phí tính nCk: O(1)
  19.  
  20. void precompute() {
  21. for (int i = 0; i < N; i++) {
  22. C[i][0] = 1;
  23. for (int j = 1; j <= i; j++) {
  24. C[i][j] = C[i - 1][j] + C[i - 1][j - 1];
  25. C[i][j] %= MOD;
  26. }
  27. }
  28. }
  29.  
  30. int main() {
  31. ios::sync_with_stdio(0); cin.tie(0);
  32. precompute();
  33.  
  34. int t; cin >> t;
  35.  
  36. while (t--) {
  37. int n, k;
  38. cin >> n >> k;
  39. cout << C[n][k] << '\n';
  40. }
  41. }
Success #stdin #stdout 0.01s 7592KB
stdin
5
1000 1000
500 400
200 100
55 40
10 2
stdout
1
728779578
407336795
700442497
45