问题描述
在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两个车都不能相互攻击,有多少中放法(车与车之间是没有差别的)
输入格式
包含一个正整数n
输出格式
一个整数,表示放置车的方法数
样例输入
2
样例输出
7
数据规模和约定
n<=8
【样例解释】一个车都不放为1种,放置一个车有4种,放置2个车有2种。
#include <stdio.h>
#include <iostream>
using namespace std;
//排列组合
int a(int x,int y){
int s=1;
for(int i=x;i>x-y;i--)
s*=i;
return s;
}
int c(int x,int y){
int s=1;
for(int i=1;i<=y;i++)s*=i;
return a(x,y)/s;
}
int main(void){
int n,s=0;
cin>>n;
for(int i=0;i<=n;i++)
s+=c(n,i)*a(n,i);
cout<<s;
return 0;
}