资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定N×N的棋盘,问有多少种放置N个车使他们不互相攻击的方案。
输入格式
一行一个整数,N。
输出格式
一行一个整数,表示方案数。
样例输入
3
样例输出
6
数据规模和约定
N<=20
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
long long int ans=1;
for(int i=2;i<=n;i++){
ans*=i;
}
cout<<ans<<endl;
return 0;
}
思路:一行一行的放,第一行有n种放法,放了一个车之后,该列也不能放。剩下(n-1)*(n-1)的棋盘格,有n-1种放法……到最后剩下1×1的棋盘格,1种放法。
所有总共有n!种放法。
这道题是车的放置的一种情况,车的放置还可以用dfs,但本题不能,原因是这里的N<=20(车的放置N<=8),而dfs的时间复杂度是2^n,会运行超时。