"""
https://www.lanqiao.cn/problems/2942/learning/?page=1&first_category_id=1&problem_id=2942
"""
import sys
sys.setrecursionlimit(100000)
# 判断学生x能否进入group
def check(x, group):
for i in group:
if x % i == 0 or i % x == 0:
return False
return True
n = int(input())
a = list(map(int, input().split()))
ans = n
# 所有分组
groups = []
def dfs(depth):
# 第depth个学生: 要么加入某个已有的组, 要么单独开一组
global ans
# 此时所有学生都已经分完组了, 取组数最小值
if depth == n:
ans = min(ans, len(groups))
return
# 可行性剪枝: 枚举已有的每个分组, 判断学生x能否能加入到g内
for g in groups:
if check(a[depth], g):
g.append(a[depth])
dfs(depth + 1)
# 回溯
g.pop()
#单独开一组
groups.append([a[depth]])
# 回溯删除当前组
dfs(depth + 1)
# 回溯
groups.pop()
dfs(0)
print(ans)
蓝桥杯-数字王国之军训排队
最新推荐文章于 2024-07-18 19:36:20 发布