可以发现最优的方案就是一个循环节内互换。

所以一个有n个元素,c个循环节的置换的交换次数(最少)是n-c。

然后就可以递推了,把i插入到前i-1个元素构成的置换中,要么新成立一个循环,要么加入到之前的任意循环中去。

所以f[i][j]=f[i-1][j]+f[i-1][j-1]*(i-1)

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#define ll unsigned long long
ll f[25][25];
int n,k; inline void init(){
f[0][0]=1;
for(int i=1;i<=21;i++)
for(int j=0;j<i;j++){
f[i][j]=f[i-1][j];
//i自己独立形成一个循环
if(j) f[i][j]+=f[i-1][j-1]*(ll)(i-1);
//i插入之前循环的任意一个位置
}
} int main(){
init(); while(scanf("%d%d",&n,&k)==2){
if(!n&&!k) break;
printf("%llu\n",f[n][k]);
} return 0;
}

  

最新文章

  1. 识别 Linux上的设备(磁盘)类型
  2. Linux学习笔记(2)-开机
  3. Xen启动过程分析(还是分享过来吧,找了好长时间)
  4. 解决MyEclipse报错问题
  5. sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段
  6. 递推DP URAL 1009 K-based Numbers
  7. SQL Server 中 with tmp 临时表的用法
  8. Python核心编程-基础2
  9. incompatible
  10. 20160728noip模拟赛zld
  11. IO流06_处理流
  12. poj 2586 Y2K Accounting Bug
  13. Qt中各个widget前后位置的设定(在Qt中,所有问题都要一分为二,QWidget体系和QGraphicsWidget体系)
  14. java.lang.NoClassDefFoundError: ognl/PropertyAccessor解决的方法
  15. 将notepad++打造成java快速开发IDE
  16. lintcode.66 二叉树前序遍历
  17. Fatal error: ENOSPC: System limit for number of file watchers reached
  18. 关于h5使用bpmn.js
  19. BZOJ4538 HNOI2016网络(树链剖分+线段树+堆/整体二分+树上差分)
  20. URL中传递参数给视图函数

热门文章

  1. http协议--留
  2. React02
  3. HDU 4750 Count The Pairs (离线并查集)
  4. HDU 4262 Juggler 树状数组
  5. 201621123034 《Java程序设计》第7周学习总结
  6. 雅礼集训 Day2 T3 联盟 解题报告
  7. ZCC loves cube(cube)
  8. Codeforces 922.F Divisibility
  9. java 复习整理(三 修饰符)
  10. Disable or enable the IPv6 protocol in Red Hat Enterprise Linux