题意: 0~k(1<=k<=4)个不同的书放在不是原来位置的方案数
思路: 错排,组合数预处理的时候开ll c1000会爆int
#include<bits/stdc++.h>
#define PI acos(-1.0)
#define push_back pb
using namespace std;
typedef long long ll;
const int MAX_N=1e6+50;
const int MOD=1e9+7;
const int INF=0x3f3f3f3f;
ll c[1005][1005];
int D[10];
/// 错排公式 D[0]=1,D[1]=0,D[2]=1,D[n]=(n-1)*(D[n-1]+D[n-2]);
void init(){
c[0][0]=c[1][0]=c[1][1]=1;
for(int i=2;i<=1000;i++){
c[i][0]=1;
for(int j=1;j<=i&&j<=4;++j) c[i][j]=c[i-1][j]+c[i-1][j-1];
}
D[0]=1;
D[1]=0;
D[2]=1;
D[3]=2;
D[4]=9;
}
int main(void){
init();
int n,k;
cin >> n>>k;
ll ans=1;
for(int i=2;i<=k;i++){
ans+=c[n][i]*(i-1)*(D[i-1]+D[i-2]); //c[n][i]和c[n][n-i]相同
}
cout << ans << endl;
return 0;
}