题目传送门
大致思路
肯定不能计算所有排列的逆序对, $100!$ 肯定超时
发现n排列的k个逆序对可以由 n-1 排列计算得来:
记dp[i][j]为i排列,有j个逆序对的排列个数
假设n-1排列为 ********
那么插入一个n: ********n ,逆序对个数也就是n-1排列原本有的逆序对个数
再比如 *******n* ,逆序对个数也就是n-1排列原本有的逆序对个数 + 1
以此类推,便有
$$dp[i][j]=\sum_{k=1}^{i-1}dp[i-1][j-k](0≤j-k) $$
另外注意初始化
Code
1 | void solve() { |
说些什么吧!