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;

    }
};
相关推荐
快去睡觉~22 分钟前
力扣1005:k次取反后最大化的数组和
数据结构·算法·leetcode
smilejingwei37 分钟前
数据分析编程第二步: 最简单的数据分析尝试
数据库·算法·数据分析·esprocspl
草莓熊Lotso1 小时前
【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day10
c语言·开发语言·经验分享·算法·强化
张同学的IT技术日记2 小时前
详细实例说明+典型案例实现 对迭代法进行全面分析 | C++
算法
Coovally AI模型快速验证2 小时前
全景式综述|多模态目标跟踪全面解析:方法、数据、挑战与未来
人工智能·深度学习·算法·机器学习·计算机视觉·目标跟踪·无人机
草莓熊Lotso3 小时前
【C++】--函数参数传递:传值与传引用的深度解析
c语言·开发语言·c++·其他·算法
不知名。。。。。。。。3 小时前
算法 ----- 链式
算法
网易独家音乐人Mike Zhou3 小时前
【Python】圆柱体内部3D点云仿真及ply文件生成,圆形3D点云检测及拟合算法
stm32·单片机·mcu·物联网·算法·点云·iot
scx201310044 小时前
20250822 组题总结
c++·算法
智驱力人工智能4 小时前
智慧工厂烟雾检测:全场景覆盖与精准防控
人工智能·算法·安全·智慧城市·烟雾检测·明火检测·安全生产