• 状态压缩子集枚举2305. 公平分发饼干


    问题描述

    给你一个整数数组 cookies ,其中 cookies[i] 表示在第 i 个零食包中的饼干数量。另给你一个整数 k 表示等待分发零食包的孩子数量,所有 零食包都需要分发。在同一个零食包中的所有饼干都必须分发给同一个孩子,不能分开。
    分发的 不公平程度 定义为单个孩子在分发过程中能够获得饼干的最大总数。
    返回所有分发的最小不公平程度。

    示例 1:
    输入:cookies = [8,15,10,20,8], k = 2
    输出:31
    解释:一种最优方案是 [8,15,8] 和 [10,20] 。

    • 第 1 个孩子分到 [8,15,8] ,总计 8 + 15 + 8 = 31 块饼干。
    • 第 2 个孩子分到 [10,20] ,总计 10 + 20 = 30 块饼干。
      分发的不公平程度为 max(31,30) = 31 。
      可以证明不存在不公平程度小于 31 的分发方案。
      示例 2:
      输入:cookies = [6,1,3,2,2,4,1,2], k = 3
      输出:7
      解释:一种最优方案是 [6,1]、[3,2,2] 和 [4,1,2] 。
    • 第 1 个孩子分到 [6,1] ,总计 6 + 1 = 7 块饼干。
    • 第 2 个孩子分到 [3,2,2] ,总计 3 + 2 + 2 = 7 块饼干。
    • 第 3 个孩子分到 [4,1,2] ,总计 4 + 1 + 2 = 7 块饼干。
      分发的不公平程度为 max(7,7,7) = 7 。
      可以证明不存在不公平程度小于 7 的分发方案。

    提示:
    2 <= cookies.length <= 8
    1 <= cookies[i] <= 105
    2 <= k <= cookies.length

    问题求解

    dp[i][j]: 前i + 1个孩子分配了j这种划分的最小不公平数。
    可以枚举最后一个孩子的分配方案s,将dp[i][j]转为计算dp[i - 1][j ^ s],这样就完成了状态转移。

    class Solution:
        def distributeCookies(self, cookies: List[int], k: int) -> int:
            n = len(cookies)
            dp = [[0 for _ in range(1 << n)] for _ in range(k)]
            
            subsum = [0] * (1 << n)
            for i in range(1 << n):
                for j in range(n):
                    if i >> j & 1 == 1:
                        subsum[i] += cookies[j]
                dp[0][i] = subsum[i]
            
            for i in range(1, k):
                for j in range(1 << n):
                    dp[i][j] = float("inf")
                    s = j
                    while s:
                        dp[i][j] = min(dp[i][j], max(dp[i - 1][j ^ s], subsum[s]))
                        s = (s - 1) & j
    
            return dp[k - 1][(1 << n) - 1]
    
  • 相关阅读:
    Jmeter接口测试时传递json格式的数据
    selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element 定位frame中的元素
    selenium报错“selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.”的解决方案
    python+selenium如何定位页面的元素,有几种定位元素的方法?
    c#中的表达式
    占位符的使用
    数据类型(变量的声明与赋值)
    Hello World 老调重谈
    易语言转C#小试牛刀
    开博了
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/16663754.html
Copyright © 2020-2023  润新知