Uva 11077 Find the Permutation
2024-09-09 20:42:10
可以发现最优的方案就是一个循环节内互换。
所以一个有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;
}
最新文章
- 识别 Linux上的设备(磁盘)类型
- Linux学习笔记(2)-开机
- Xen启动过程分析(还是分享过来吧,找了好长时间)
- 解决MyEclipse报错问题
- sqlite 的比较等运算是根据不同的值而不同的,并不是根据的字段类型,因为 sqlite 是弱类型字段
- 递推DP URAL 1009 K-based Numbers
- SQL Server 中 with tmp 临时表的用法
- Python核心编程-基础2
- incompatible
- 20160728noip模拟赛zld
- IO流06_处理流
- poj 2586 Y2K Accounting Bug
- Qt中各个widget前后位置的设定(在Qt中,所有问题都要一分为二,QWidget体系和QGraphicsWidget体系)
- java.lang.NoClassDefFoundError: ognl/PropertyAccessor解决的方法
- 将notepad++打造成java快速开发IDE
- lintcode.66 二叉树前序遍历
- Fatal error: ENOSPC: System limit for number of file watchers reached
- 关于h5使用bpmn.js
- BZOJ4538 HNOI2016网络(树链剖分+线段树+堆/整体二分+树上差分)
- URL中传递参数给视图函数