ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

状压DP-1815. 得到新鲜甜甜圈的最多组数

2022-08-19 20:30:58  阅读:137  来源: 互联网

标签:1815 nums 甜甜 状压 groups 顾客 一批 batchSize DP


问题描述

有一个甜甜圈商店,每批次都烤 batchSize 个甜甜圈。这个店铺有个规则,就是在烤一批新的甜甜圈时,之前 所有 甜甜圈都必须已经全部销售完毕。给你一个整数 batchSize 和一个整数数组 groups ,数组中的每个整数都代表一批前来购买甜甜圈的顾客,其中 groups[i] 表示这一批顾客的人数。每一位顾客都恰好只要一个甜甜圈。

当有一批顾客来到商店时,他们所有人都必须在下一批顾客来之前购买完甜甜圈。如果一批顾客中第一位顾客得到的甜甜圈不是上一组剩下的,那么这一组人都会很开心。

你可以随意安排每批顾客到来的顺序。请你返回在此前提下,最多 有多少组人会感到开心。

示例 1:

输入:batchSize = 3, groups = [1,2,3,4,5,6]
输出:4
解释:你可以将这些批次的顾客顺序安排为 [6,2,4,5,1,3] 。那么第 1,2,4,6 组都会感到开心。
示例 2:

输入:batchSize = 4, groups = [1,3,2,5,2,2,1,6]
输出:4

提示:

1 <= batchSize <= 9
1 <= groups.length <= 30
1 <= groups[i] <= 109

问题求解

直接对group进行状压是一定会超时的,但是考虑到batchsize很小,因此可以对batchsize状压。

  • 对groups里每个元素%batchsize,其中为0的可以直接先处理,因此最终只会剩余至多8个不同的数字。
  • 在每一步处理的时候,对已经处理过的数字进行计数,这样就可以控制每一步的扩展空间。
class Solution:
    def maxHappyGroups(self, batch: int, nums: List[int]) -> int:
        
        nums = [i % batch for i in nums]
        res = nums.count(0)
        nums = [i for i in nums if i != 0]
        n = len(nums)

        @cache
        def dfs(rest, mask):
            if mask == (1 << n) - 1:
                return 0
            res = 0
            used = set()
            for i, num in enumerate(nums):
                if mask >> i & 1 == 0 and num not in used:
                    used.add(num)
                    res = max(res, dfs((rest + nums[i]) % batch, mask | (1 << i)))

            return res + int(rest == 0)
                        
        res = res + dfs(0, 0)
        
        return res

标签:1815,nums,甜甜,状压,groups,顾客,一批,batchSize,DP
来源: https://www.cnblogs.com/hyserendipity/p/16603242.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有