LeetCode2741.特别的排列 状压

暴力枚举的话是n!

考虑状压DP,其实就是用二进制表示状态 再进行暴力 同时加一个记忆化就好了

这里有常用技巧:

全集(1<<n)-1

增加某个元素 x | (1<<i)

删除某个元素 x & ~(1<<i)

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

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

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

    
}

class Solution {
public:
    int specialPerm(vector<int>& nums) {
        memset(dp,-1,sizeof dp);
        n = nums.size();
        nums1 = nums;
        nums1.push_back(1);
        return dfs((1<<n)-1,n);
    }
};
相关推荐
漂流瓶jz14 小时前
UVA-1604 立体八数码问题 题解答案代码 算法竞赛入门经典第二版
算法·ida·深度优先·图论·dfs·bfs·迭代加深搜索
m0_5312371714 小时前
C语言-while循环,continue/break,getchar()/putchar()
java·c语言·算法
一条大祥脚15 小时前
KMP原理+例题
算法
追随者永远是胜利者1 天前
(LeetCode-Hot100)20. 有效的括号
java·算法·leetcode·职场和发展·go
瓦特what?1 天前
快 速 排 序
数据结构·算法·排序算法
niuniudengdeng1 天前
基于时序上下文编码的端到端无文本依赖语音分词模型
人工智能·数学·算法·概率论
hetao17338371 天前
2026-02-13~16 hetao1733837 的刷题记录
c++·算法
你的冰西瓜1 天前
2026春晚魔术揭秘——变魔法为物理
算法
忘梓.1 天前
解锁动态规划的奥秘:从零到精通的创新思维解析(10)
c++·算法·动态规划·代理模式
foolish..1 天前
动态规划笔记
笔记·算法·动态规划