题解/算法 {3193. 统计逆序对的数目}
@LINK: https://leetcode.cn/problems/count-the-number-of-inversions/
;
我们令Cont[x] = y
为: A[0...x]
里需要有y
个逆序对 这个要求, y=-1
说明无限制, 注意 题目说明 Cont[N-1] != -1
;
很容易想到是 记忆化DP, 看一个超时做法 Dfs( ind, cont, vector<int> nums) (nums.size()==ind+1)
表示 我们要将nums
放到A[0...,ind]
这些位置上 且这个他需要有cont
个逆序对;
.
举个例子, ind=3, cont=6, nums={0,2,4,6}
, 我们枚举A[ind]
的选择: 放0
则Dfs( ind=2, cont=6-3, nums={2,4,6})
, 放2
则Dfs( ind=2, cont=6-2, nums={0,4,6})
, …
当然 他是超时的, 其实 因为ind == nums.size()-1
, 所以可以把ind
这个状态 给去掉, 即(nums, cont)
其中nums
的种数是C(n,k)
n=300
k=num.size()</