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)

相关推荐
zl_vslam10 分钟前
SLAM中的非线性优-3D图优化之IMU预积分SE3推导(二十一)
人工智能·算法·计算机视觉·3d
c++逐梦人12 分钟前
DFS经典例题(八皇后,数独)
算法·蓝桥杯·深度优先
进击的小头13 分钟前
第18篇:PID参数整定与裕度优化的现场调试实战
python·算法
cpp_250116 分钟前
P1796 汤姆斯的天堂梦
数据结构·c++·算法·题解·洛谷·线性dp
凌波粒21 分钟前
LeetCode--19.删除链表的倒数第 N 个结点(链表)
java·算法·leetcode·链表
Fcy64827 分钟前
与红黑树有关算法题
算法
爱搞虚幻的阿恺1 小时前
UE入门-如何使用结构体数组创建动态UI
算法
重生之我是Java开发战士1 小时前
【广度优先搜索】多源BFS:矩阵,飞地的数量,地图中的最高点,地图分析
数据结构·算法·矩阵·广度优先
sali-tec1 小时前
C# 基于OpenCv的视觉工作流-章43-轮廓匹配
图像处理·人工智能·opencv·算法·计算机视觉
Coovally AI模型快速验证1 小时前
检测+跟踪一体化!4.39M参数、8.3W功耗,轻量化模型让无人机在露天矿实时巡检
算法·yolo·无人机·智能巡检·智慧矿山