- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的两次招聘挑战中(在 HackerEarth 上),我遇到了以下问题。该问题无法在线获得,因此这里是我内存中的问题陈述:
给定一个背包 M
重量和n
元素,每个元素的重量都是正数 w
和正值v
(作为数组 weight[]
和 val[]
给出)。每个项目都可以无限次使用。但是如果你拿了一个项目 x
次数,那么所有其他项目(如果被拿走)都必须被拿走x
次数。
这里x
是一个小于 100 的斐波那契数。
当背包的总重量为<= M
时,求出你能拥有的最大值.
约束:
n <= 20
(M, 权重, 值)<=1e9
示例测试用例:
n=2, M = 125
权重=[50, 25]
值 =[100, 51]
对于 x=1:最大值为 100+51 = 151
对于 x=2:最大值为 2*100 = 200
对于 x=3:最大值为 3*51 = 153
对于 x=5:最大值为 5*51 = 255
对于其余的 x: max val 将为 0
谁能建议如何处理它。
这是我所做的:
生成所有可能的项目子集(使用位掩码),对于每个子集,我继续将其权重乘以 x = 1,2,3,5...
直到重量超过M
同时保持到目前为止获得的最大 val 的计数。在 2^n
之后迭代,即使我得到了答案,但它只通过了 15 个测试用例中的 3 个,其余的都获得了 TLEd。
最佳答案
我认为一个小的优化就能通过所有测试用例。为 x 预先计算最接近的较小斐波那契数。现在在生成所有子集 sum 之后,将 m 除以 sum 。找到最近的较小斐波那契数 ( m/sum)。乘以总和。所以整体时间复杂度为O(2^n)。
关于algorithm - 扭曲背包问题(无界斐波那契约束),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54039550/
我有一个Foldable的Integer s 是无界的,因此我无法应用 Max折叠到它。 定义 Max 有意义吗? Nothing 的实例当一个值不存在时?有Ord a => Semigroup (M
我有两个简单的问题。我有一个 LinkedBlockingQueue,我将其简单地创建为 新的 LinkedBlockingQueue() 所以我认为这保证是无限的,对吗? 如果确实如此,那么说在此队
是否可以在未指定边界之一的情况下使用 git bisect。例如,如果我发现 HEAD 上有问题但我怀疑它在过去在某个时候有效,有没有办法告诉 git “尝试一次提交之前,如果那不起作用尝试两次提交之
我是一名优秀的程序员,十分优秀!