您的位置:首页 > 其它

动态规划(二)——错位重排

2016-05-19 21:30 435 查看

简介

错位重排问题是伯努利和欧拉在错装信封时发现的,是比较有意思的发现这两家伙是有多无聊。一般的全错位排列问题研究这样的问题:

1.给所有的容器和等量的物品标号。

2.将物品放到容器中,不允许容器放入自己标号的物品。

基于这样模型的问题就是错位重排问题。

模型的递推公式推导

为了coding方便,也根据DP的思想,我们设计递推公式来解决这个问题,同样地,我们使用
F
来表示n个物品的错排个数,下面我们可以分两步进行重排的操作,这里先贴一篇比较好的参考:错排公式

题目传送门:不容易系列

完全的重排模型。

上代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <algorithm>
#define N 31
using namespace std;
long F; //Êý¾Ý·¶Î§×¢Òâ
int main(){
//freopen("test.txt","r",stdin);
int n;
memset(F,0,sizeof(F));
F[0]=0;F[1]=0;F[2]=1;
for(int i=3;i<N;i++){
F[i]=(i-1)*(F[i-1]+F[i-2]);
}
while(scanf("%d",&n)!=EOF){
printf("%ld\n",F);
}
return 0;
}



本篇写的有点匆忙,过后继续补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  动态规划 dp acm