1. 程式人生 > 其它 >629_K個逆序對陣列_2021.11.11(困難)

629_K個逆序對陣列_2021.11.11(困難)

給出兩個整數n和k,找出所有包含從1到n的數字,且恰好擁有k個逆序對的不同的陣列的個數。

逆序對的定義如下:對於陣列的第i個和第j個元素,如果滿i<j且a[i]>a[j],則其為一個逆序對;否則不是。

由於答案可能很大,只需要返回 答案 mod 109+ 7 的值。

不會做,直接學習題解程式碼:

 1 class Solution {
 2 private:
 3     static constexpr int mod = 1000000007;
 4 
 5 public:
 6     int kInversePairs(int n, int k) {
 7         vector<vector<int
>> f(2, vector<int>(k + 1)); 8 f[0][0] = 1; 9 for (int i = 1; i <= n; ++i) { 10 for (int j = 0; j <= k; ++j) { 11 int cur = i & 1, prev = cur ^ 1; 12 f[cur][j] = (j - 1 >= 0 ? f[cur][j - 1] : 0) - (j - i >= 0 ? f[prev][j - i] : 0
) + f[prev][j]; 13 if (f[cur][j] >= mod) { 14 f[cur][j] -= mod; 15 } 16 else if (f[cur][j] < 0) { 17 f[cur][j] += mod; 18 } 19 } 20 } 21 return f[n & 1][k]; 22 }
23 };