DFS之剪枝(上交考研题目--正方形数组的数目)

题目

给定一个非负整数数组 A A A,如果该数组每对相邻元素之和是一个完全平方数,则称这一数组为正方形数组。

返回 A A A 的正方形排列的数目。

两个排列 A 1 A1 A1 和 A 2 A2 A2 不同的充要条件是存在某个索引 i i i,使得 A 1 [ i ] ≠ A 2 [ i ] A1[i] \neq A2[i] A1[i]=A2[i]。

输入格式

第一行包含一个整数 n n n,表示数组 A A A 的长度。

第二行包含 n n n 个整数 A [ i ] A[i] A[i]。

输出格式

一个整数,表示 A A A 的正方形排列的数目。

数据范围

1 ≤ n ≤ 12 1 \le n \le 12 1≤n≤12,
0 ≤ A [ i ] ≤ 1 0 9 0 \le A[i] \le 10^9 0≤A[i]≤109。

输入样例:
复制代码
3
1 17 8
输出样例:
复制代码
2
样例解释

1 , 8 , 17 \] \[1,8,17\] \[1,8,17\] 和 \[ 17 , 8 , 1 \] \[17,8,1\] \[17,8,1\] 都是有效的排列。 思路:使用DFS() 注意使用全排列会有重复 solution1 : 使用set()进行去重,然后在进行判断 solution2 :直接进行得到最终的cnt,然后用 *假设原来有6个0,6个1,计算得到cnt=74,649,600* 那么直接用 74,649,600/6!/6! = 144 ,得到cnt=144 但是没有通过 ![在这里插入图片描述](https://file.jishuzhan.net/article/1781201165011128321/ddb48dcbf9bc2f2c8e8515835aee1eb5.webp) > 说明我们不能取完全部的排列,要剪枝 `怎么减?` 假如我们规定好在相同的数字中,索引小的一定排在前面,那么就不会有重复了。 ```python from itertools import permutations as per import math N = int(input()) s = [0] + list(map(int,input().split())) d = dict() for i in s: if i in d.keys(): d[i] += 1 else:d[i] = 1 state = [ False for i in range(N+1)] def judge(string,i,x): if (int(x) - int(math.sqrt(int(x)))*int(math.sqrt(int(x))))>1e-5 :return False else: for x in string: if s[i] == s[x] and i1 and judge(string,i,s[i] + last)): state[i] = True DFS(string+[i],n+1,s[i]) state[i] = False string = [] DFS(string,1,0) ''' fact = [ 1 for i in range(13)] for i in range(1,13): fact[i] = fact[i-1]*i for i in d.values(): cnt//=fact[i] ''' print(cnt) ``` 就可以AC了 ![在这里插入图片描述](https://file.jishuzhan.net/article/1781201165011128321/7894a87a3a42725bb810ca4ff272ecf3.webp)

相关推荐
山登绝顶我为峰 3(^v^)323 分钟前
如何录制带备注的演示文稿(LaTex Beamer + Pympress)
c++·线性代数·算法·计算机·密码学·音视频·latex
Two_brushes.1 小时前
【算法】宽度优先遍历BFS
算法·leetcode·哈希算法·宽度优先
森焱森3 小时前
水下航行器外形分类详解
c语言·单片机·算法·架构·无人机
QuantumStack5 小时前
【C++ 真题】P1104 生日
开发语言·c++·算法
写个博客6 小时前
暑假算法日记第一天
算法
绿皮的猪猪侠6 小时前
算法笔记上机训练实战指南刷题
笔记·算法·pta·上机·浙大
hie988947 小时前
MATLAB锂离子电池伪二维(P2D)模型实现
人工智能·算法·matlab
杰克尼7 小时前
BM5 合并k个已排序的链表
数据结构·算法·链表
.30-06Springfield8 小时前
决策树(Decision tree)算法详解(ID3、C4.5、CART)
人工智能·python·算法·决策树·机器学习
我不是哆啦A梦8 小时前
破解风电运维“百模大战”困局,机械版ChatGPT诞生?
运维·人工智能·python·算法·chatgpt