参考答案:
点击打开链接
class Solution { public: int kInversePairs(int n, int k) { //if(n<=0) return; int dp[n+1][k+1]; int mod = 1000000007;
memset(dp,0,sizeof(dp)); for(int i = 1 ; i <= n ;i++){ dp[i][0] = 1 ; } for(int i = 1 ; i <= n ; i++){
//j是不能超过k,和最大可能的逆序数二者中最小的的 for(int j = 1 ; j <=min(k, ((1+i-1)*(i-1)/2)) ;j++){ if(j>=i){
//减去的是dp[i-1][j-i] dp[i][j] = (dp[i][j-1] + dp[i-1][j] - dp[i-1][j-i])%mod; dp[i][j]=(dp[i][j-1]-dp[i-1][j-i])<0?(dp[i][j]+mod)%mod:dp[i][j]; } else{ dp[i][j] =(dp[i][j-1] + dp[i-1][j])%mod ; } } } return dp[n][k]; } };