《七月集训》第三十一天 状态压缩

Crazy_DM Crazy_DM 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

526.优美的排列

class Solution {
public:
    int countArrangement(int n) {
        vector<int> dp(1 << n);
        dp[0] = 1;
        for(int mask = 1; mask < (1 << n); ++mask) {
            int num = __builtin_popcount(mask); //代表当前序列的长度
            for(int i = 0; i < n; ++i) {//寻找mask适合的位置
                if(mask & (1 << i) && (num % (i + 1) == 0 || (i + 1) % num == 0)) {
                    dp[mask] += dp[mask ^ (1 << i)]; // mask^(1<<i) 表示第mask^(1<<i)是空缺的且num能够放进去,加上这种方案数
                    //cout << dp[mask] << endl;
                }
            }
        }
        return dp[(1<<n) - 1];
    }
};

 

...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部
Crazy_DM
万人千题 64,203 成员 15,010 内容