洛谷P1521 求逆序对 正文 回到顶部 题目描述 我们说(i,j)是a1,a2,…,aN的一个逆序对当且仅当i<j且ai>a j。例如2,4,1,3,5的逆序对有3个,分别为(1,3),(2,3),(2,4)。现在已知N和K,求1…N的所有特定排列,这些排列的逆序对的数量恰好为K。输出这些特定排列的数量。 例如N=5,K=3的时候,满足条件的排列有15个,它们是
std::cin>>n>>c; dp[1][1]=1;//显然的,长度为1逆序对为0的个数为1。for(intj=1;j<=c+1;j++) pre[1][j]=1;//初始化for(inti=2;i<=n;i++){for(intj=1;j<=c+1;j++){//为方便前缀和,我把逆序对数量都往上加了1dp[p][j]=(pre[!p][j]-pre[!p][max(j-i,0)]+10000)...
洛谷P1521 求逆序对 题解 题意: 求1到n的全排列中有m对逆序对的方案数。 思路: 1.f[i][j]表示1到i的全排列中有j对逆序对的方案数。 2.显然,1到i的全排列最多有(i-1)*i/2对逆序对,而对于f[i][j]来说,新加入一个数i+1,产生的新的逆序对数与插入的位置有关(数目为插入的数的位置之后的数...
n<=100n<=100 f[i][j]f[i][j]表⽰11~ii的全排列有j个逆序对的⽅案数 f[i][j]=Σf[i−1][j−k](0<=k<=i−1)f[i][j]=Σf[i−1][j−k](0<=k<=i−1) O(m∗n2)O(m∗n2) 拓展:如果n<=1000n<=1000呢? n<=1000n<=1000? f[i][j]f[i][j]是f[i...