hdu1465---全错位排列
有n封信:首先,第一个信封不能放第一个封信,可以放2,3,4,5…n有(n-1)种选择,假设放了第k封信;那么对于第k个信封,如果放了第一封信,之后就变成了(n-2)个信封的全错位排列,如果放的不是第1封信,就变成(n-1)个信封的全错位排列
/*
n个数的错位排列种数:
(n-1)*(n-1个和n-2个数的错位排列种数之和)
*/
#include
typedef long long ll;
ll ans[25];
void init(){ans[2] = 1;ans[3] = 2;for(int i = 4;i <= 20;i++){ans[i] = (i-1)*(ans[i-1]+ans[i-2]);}
}
int n;
int main(){init();while(~scanf("%d",&n)){printf("%lld\n",ans[n]);}return 0;
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
