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;

    }
};
相关推荐
爱刷碗的苏泓舒29 分钟前
PPP-AR 中的参考星选取:数学原理、评价指标与切换处理
算法·gnss·模糊度固定·ppp-ar·星间单差·参考星·卫星端偏差
谙弆悕博士2 小时前
系统集成项目管理工程师教程(第3版)笔记——第17章:法律法规和标准规范
笔记·职场和发展·学习方法·业界资讯·软考·法律·法规
烬羽3 小时前
递归老写崩?一个"退回"公式,把回溯题变成填空题
javascript·深度学习·算法
闪电悠米3 小时前
力扣hot100-41.缺失的第一个正数-原地哈希详解
数据结构·算法·哈希算法
星空露珠4 小时前
28种颜色对应名称,
开发语言·数据库·算法·游戏·lua
QXWZ_IA6 小时前
桥梁数字孪生怎么落地?
人工智能·科技·算法·智能硬件·政务
Kel6 小时前
输出层与反分词(Output Layer & Detokenization)
人工智能·算法·架构
陕西企来客6 小时前
2026年7月技术好GEO优化方案:算法适配与内容策略
人工智能·算法·机器学习·技术好geo优化
风栖柳白杨6 小时前
【面试】AI算法工程师_空白自测版本
人工智能·算法·面试
imbackneverdie7 小时前
知网官宣:禁止 AI 列为论文署名作者,标注 Gemini、DeepSeek 等 AI 为作者的稿件统一下架
大数据·人工智能·ai·职场和发展·aigc·科研·高校