LeetCode 996.正方形数组的数目

和上一道状压的区别在于我们要去重一下~

思路都是和上一篇博客是一样的,感兴趣的同学可以看一下

cpp 复制代码
const int N = 15;
int dp[1<<N][N];
int n;
vector<int>nums1;

bool check(int x){
    int tem  = sqrt(x);
    if(tem*tem==x)return 1;
    return 0;
}


int dfs(int u,int id){
    if(u==0)return 1;
    if(~dp[u][id])return dp[u][id];

    int res = 0;
    for(int i=0;i<n;i++){
        if(((u>>i)&1) && check(nums1[i]+nums1[id]))
          res = res + dfs(u&~(1<<i),i);
    }

    return dp[u][id] = res;
}


class Solution {
public:
    int numSquarefulPerms(vector<int>& nums) {
        n = nums.size();
        nums1 = nums;
        memset(dp,-1,sizeof dp);
        int ans = 0;
        int u = (1<<n)-1;
        for(int i=0;i<n;i++)
         ans = ans + dfs(u&~(1<<i),i);
        

        map<int,int>mp;
        for(auto &t:nums)++mp[t];

        for(auto [_,cnt]:mp){
            while(cnt){
                ans/=cnt;
                cnt--;
            }
        }



        return ans;

    }
};
相关推荐
老赵聊算法、大模型备案4 小时前
北京市生成式人工智能服务已备案信息公告(2025年12月11日)
人工智能·算法·安全·aigc
CoderYanger5 小时前
C.滑动窗口-求子数组个数-越长越合法——2799. 统计完全子数组的数目
java·c语言·开发语言·数据结构·算法·leetcode·职场和发展
厕所博士5 小时前
红黑树原理前置理解—— 2-3 树
算法·2-3树·红黑树原理理解前置
萌>__<新5 小时前
力扣打卡每日一题————除自身外所有元素的乘积
数据结构·算法
xu_yule6 小时前
算法基础—搜索(2)【记忆化搜索+BFS+01BFS+Floodfill]
数据结构·算法
s09071366 小时前
Xilinx FPGA使用 FIR IP 核做匹配滤波时如何减少DSP使用量
算法·fpga开发·xilinx·ip core·fir滤波
老马啸西风6 小时前
成熟企业级技术平台-10-跳板机 / 堡垒机(Bastion Host)详解
人工智能·深度学习·算法·职场和发展
子夜江寒6 小时前
逻辑回归简介
算法·机器学习·逻辑回归
软件算法开发6 小时前
基于ACO蚁群优化算法的多车辆含时间窗VRPTW问题求解matlab仿真
算法·matlab·aco·vrptw·蚁群优化·多车辆·时间窗
another heaven7 小时前
【软考 磁盘磁道访问时间】总容量等相关案例题型
linux·网络·算法·磁盘·磁道