蓝桥杯 算法训练 车的放置(Python)

资源限制

内存限制:256.0MB   C/C++时间限制:1.0s   Java时间限制:3.0s   Python时间限制:5.0s

问题描述

  在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两个车都不能相互攻击,有多少中放法(车与车之间是没有差别的)

输入格式

  包含一个正整数n

输出格式

  一个整数,表示放置车的方法数

样例输入

2

样例输出

7

数据规模和约定

  n<=8
  【样例解释】一个车都不放为1种,放置一个车有4种,放置2个车有2种。

from itertools import *

n = int(input())
s = "ABCDEFGH"
s1 = s[:n]
num = 1
# 每一排至多只能放一个车,此处的i表示的是车的数量
# 先用组合求出所选的行
# 再用排列求出所选的列
for i in range(1, n + 1):
    num1 = 0
    num2 = 0
    for j in combinations(s1, i):
        num1 += 1
    for j in permutations(s1, i):
        num2 += 1
    num += num1 * num2
print(num)

你可能感兴趣的:(蓝桥杯,算法,python)