0
点赞
收藏
分享

微信扫一扫

试题 算法训练 车的放置

穆风1818 2022-03-13 阅读 43

问题描述

  在一个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;
}
举报

相关推荐

0 条评论