美文网首页
(状压dp)1655. 分配重复整数

(状压dp)1655. 分配重复整数

作者: 来到了没有知识的荒原 | 来源:发表于2021-09-01 11:47 被阅读0次

1655. 分配重复整数

class Solution {
 public:
  bool canDistribute(vector<int>& nums, vector<int>& qs) {
    map<int, int> mp;
    for (auto i : nums) mp[i]++;
    vector<int> cnt;
    for (auto p : mp) cnt.push_back(p.second);
    int n = cnt.size(), m = qs.size();
    bool f[n + 1][1 << m];
    int sum[1 << m];
    memset(sum, 0, sizeof sum);
    memset(f, 0, sizeof f);

    for (int mask = 0; mask < 1 << m; mask++)
      for (int j = 0; j < m; j++) {
        if (mask & (1 << j)) {
          sum[mask] = sum[mask ^ (1 << j)] + qs[j];
        }
      }
    for (int i = 0; i <= n; i++) f[i][0] = true;
    for (int i = 1; i <= n; i++) {
      for (int mask = 0; mask < 1 << m; mask++) {
        f[i][mask] = f[i - 1][mask];
        for (int sub = mask; sub; sub = (sub - 1) & mask) {
          if (sum[sub] <= cnt[i - 1]) {
            f[i][mask] |= f[i - 1][mask ^ sub];
          }
        }
      }
    }

    return f[n][(1 << m) - 1];
  }
};

相关文章

  • (状压dp)1655. 分配重复整数

    1655. 分配重复整数[https://leetcode-cn.com/problems/distribute-...

  • 状压DP

    最短Hamilton路径 原题链接[https://www.acwing.com/activity/content...

  • DP训练——状压DP

    状压DP BZOJ1087题意在的棋盘里面放个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以...

  • 状压DP系列

    几点注意: 1.数组下标从1开始比较方便 zoj Easy 2048 Again保存状态的时候是保存下降子序列的情...

  • LeetCode 状压dp

    5639. 完成所有工作的最短时间[https://leetcode-cn.com/problems/find-m...

  • 状态压缩和状压DP

    问题:n*n的棋盘放置n个点,保证每一行,每一列都有且只有一个点,有几种放置方式? 一、组合数解法:ans=n!二...

  • POJ 3311 floyd+压状DP

    poj3311因为这道题 点N 不超过10 可以 把状态转化 为 二进制数,0表示没经过这个点,1表示经过这个点。...

  • 数位DP题目:LeetCode1015. 至少有 1 位重复的数

    题目链接 给定正整数 N,返回小于等于 N 且具有至少 1 位重复数字的正整数。 解答:这是一道数位DP模板题,算...

  • HDU-5816 状压DP [2016多校]

    桌面有N张A型牌,M张B型牌,目前玩家可抽一张牌(盲抽),若抽到A牌则可再抽两张,若抽到B牌,则可减少对方若干生命...

  • 状压DP——二进制的妙用

    之前我们讲解了背包问题、树形DP,区间DP这三类问题。这些都是中规中矩的动态规划题目。今天,我为大家讲解一种比较有...

网友评论

      本文标题:(状压dp)1655. 分配重复整数

      本文链接:https://www.haomeiwen.com/subject/zfyxwltx.html