hd 2049
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hd 2049相关的知识,希望对你有一定的参考价值。
先找出m新郎来错排,剩下的n-m对就是正常的。所以是f(m)*c(m,n)
错排 f(n)=(n-1)*(f(n-1)+f(n-2))
c(m,n)=n!/(m!*(n-m)!)
#include <iostream> #include <cstring> using namespace std; long long dp[22]; long long f(int n) { if(dp[n]) return dp[n]; else return dp[n]=(n-1)*(f(n-1)+f(n-2)); } long long g(int n) { if(n==0) return 1; return n*g(n-1); } int main() { int t; cin>>t; memset(dp,0,sizeof(dp)); dp[1]=0; dp[2]=1; while(t--) { int n,m; cin>>n>>m; cout<<g(n)/g(n-m)/g(m)*f(m)<<endl; } return 0; }
以上是关于hd 2049的主要内容,如果未能解决你的问题,请参考以下文章
BZOJ 2049: [Sdoi2008]Cave 洞穴勘测