2024-10-12 bitset优化的dp

leetcode3180,题目网址如下:

https://leetcode.cn/problems/maximum-total-reward-using-operations-i/description/

原题:

给你一个整数数组 rewardValues,长度为 n,代表奖励的值。

最初,你的总奖励 x 为 0,所有下标都是 未标记 的。你可以执行以下操作 任意次 

从区间 [0, n - 1] 中选择一个 未标记 的下标 i。

如果 rewardValues[i] 大于 你当前的总奖励 x,则将 rewardValues[i] 加到 x 上(即 x = x + rewardValues[i]),并 标记 下标 i。

以整数形式返回执行最优操作能够获得的 最大 总奖励。


示例 1:

输入:rewardValues = [1,1,3,3]

输出:4

解释:

依次标记下标 0 和 2,总奖励为 4,这是可获得的最大值。

示例 2:

输入:rewardValues = [1,6,4,3,2]

输出:11

解释:

依次标记下标 0、2 和 1。总奖励为 11,这是可获得的最大值。


提示:

1 <= rewardValues.length <= 2000

1 <= rewardValues[i] <= 2000


使用bitset优化的dp代码如下:

class Solution(object):

    def maxTotalReward(self, rewardValues):

        """

        :type rewardValues: List[int]

        :rtype: int

        """

        s = set(s)

        f = 1

        for v in sorted(s):

            f |= (f & ((1 << v) - 1)) << v 

        return f.bit_length() - 1

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容