G44 圆排列 错位排列

 视频链接:https://www.bilibili.com/video/BV1CA411o7JF/

Luogu P1595 信封问题

#include<iostream>
using namespace std;
const int N = 21;
long long D[N]; 

int main(){
  int n; 
  scanf("%d", &n);
  D[1]=0,D[2]=1;
  for(int i=3; i<N; i++)
    D[i]=(i-1)*(D[i-1]+D[i-2]);  
  printf("%lld\n",D[n]);
  return 0;
}

HDU 2049 考新郎

#include<iostream>
using namespace std;
const int N = 21;
long long C[N][N],D[N]; 

void init(){
  for(int i=0; i<N; i++) C[i][0]=1;
  for(int i=1; i<N; i++)
    for(int j=1; j<=i; j++)
      C[i][j]=C[i-1][j-1]+C[i-1][j]; 
      
  D[1]=0,D[2]=1;
  for(int i=3; i<N; i++)
    D[i]=(i-1)*(D[i-1]+D[i-2]);
}
int main(){
  init();
  int T, n, m; 
  scanf("%d", &T);
  while(T--){
    scanf("%d%d", &n,&m);
    printf("%lld\n",C[n][m]*D[m]);
  }
  return 0;
}

 

posted @ 2023-01-04 00:08  董晓  阅读(140)  评论(0编辑  收藏  举报