【发布时间】:2017-01-18 22:27:15
【问题描述】:
我得到了号码N。我必须找到数字1..N 的所有排列,使得数组中的反转总数为K。
For example: (all the following permutations have exactly 2 inversions)
N=4 , K=2
(1,4,2,3) , (1,3,4,2) , (2,1,4,3) , (3,1,2,4) and (2,3,1,4).
我的方法:
动态规划:让dp[i][j] 持有多种方式,使得位置i 负责j 的反转次数。
dp[n][0]=1
for(int i=n-1;i>=1;i--){
int x = Math.min(k,n-i); // Maximum Number of inversion i position can do
for(int j=0;j<=x;j++){
for(int v=0;v<=j;v++){
dp[i][j]+=dp[i+1][v];
}
}
但是我的方法给了我个人的位置倒置,我怎样才能得到全部的方法?
【问题讨论】:
-
@A.Sarid 你还能改进我目前缺少的实现吗
标签: algorithm dynamic-programming