Given two integers n
and k
, find how many different arrays consist of numbers from 1
to n
such that there are exactly k
inverse pairs.
We define an inverse pair as following: For ith
and jth
element in the array, if i
< j
and a[i]
> a[j]
then it's an inverse pair; Otherwise, it's not.
Since the answer may very large, the answer should be modulo 109 + 7.
Example 1:
Input: n = 3, k = 0 Output: 1 Explanation: Only the array [1,2,3] which consists of numbers from 1 to 3 has exactly 0 inverse pair.
Example 2:
Input: n = 3, k = 1 Output: 2 Explanation: The array [1,3,2] and [2,1,3] have exactly 1 inverse pair.
Note:
- The integer
n
is in the range [1, 1000] andk
is in the range [0, 1000].
思路:
这种求最优解的个数,而不用返回解本身的感觉好多都用动态规划,这题也不例外。
public class Solution { int mo=1000000007; public int kInversePairs(int n, int k) { int[][] f=new int[1002][1002]; f[1][0]=1; for (int i=2;i<=n;i++) { f[i][0]=1; for (int j=1;j<=k;j++) { f[i][j]=(f[i][j-1]+f[i-1][j])%mo; if (j>=i) f[i][j]=(f[i][j]-f[i-1][j-i]+mo)%mo; } } return f[n][k]; } }
参考自: